服务器发送一个字符串,我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/