Python。如何使用 datetime.today() 创建本地日期时间

标签 python datetime

服务器发送一个字符串,我striptime并将其保存在一个名为time_from_frontend的变量中,然后添加一个tzinfo,如下所示:

import pytz

my_timezone = pytz.timezone("America/Guayaquil")

A = time_from_frontend.replace(tzinfo=my_timezone)
print A
print A.tzinfo

B = (datetime.datetime.today()).replace(tzinfo=my_timezone)
print B
print B.tzinfo

print B - A

为什么我发现 A 和 B 之间存在巨大差异?以下是终端打印的内容:

2016-02-11 20:00:00-05:19
America/Guayaquil
2016-02-12 01:08:35.478507-05:19
America/Guayaquil
5:08:35.478507

前端正在向我发送实际时间,当我执行datetime.today()然后指定时区时,我以为我会得到A时间和B时间之间的微小差异(即微秒),但我得到了 5 个小时。这是时区差异(“美国/瓜亚基尔”为 GMT-5)。

我有点理解这个错误。但我该如何解决呢?有没有办法创建一个与本地时间相对应的 datetime.today() 对象?

最佳答案

我猜测您前端的日期时间采用的是UTC格式。进行替换实际上并不会转换日期时间。它使用数据/小时/等。并且只使用新的时区。

当您调用datetime.today()时,您将创建一个没有任何时区信息的天真日期时间。当您对此进行替换时,它实际上也没有进行转换,它只是假设您提供的日期已经在您提供的时区中,与您在服务器时间上所做的替换相同.

要真正将日期时间转换到另一个时区,您需要使用 astimezone 。如果来自服务器的日期时间也是naive并且没有指定时区,astimezone将会出错。为了解决这个问题。首先添加 UTC 时区。

time_from_frontend = time_from_frontend.replace(tzinfo=pytz.timezone('UTC'))
converted_server_time = time_from_frontend.astimezone(my_timezone)

关于Python。如何使用 datetime.today() 创建本地日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35353167/

相关文章:

c - 即使我联系两个不同时区的服务器,为什么时差为零?

python - 在python中计算直到每月1号或15号的时间

java - 如何转换 Telegram Api 核心日期 :int type into Java Date?

c# - 比较可为空的 DateTime?

python - Pandas 读取带有多个空格的 csv 并解析日期

python - 不存储指针的 N​​eedleman-Wunsch 全局比对中的回溯

带有请求的 Python 网络抓取 - 在响应中只得到一小部分数据

python - 将 javadoc 用于 Python 文档

python - 从 Pandas Python 数据帧重新缩放到 (0,1) 某些列

python - 从 Alpine Linux Docker 连接到 MS SQL 时遇到问题