Python. How to create a local datetime with datetime.today()
服务器发送一个字符串I
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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之间会有很大差异? 这是终端打印的内容:
1 2 3 4 5 | 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 |
前端给我发送实际时间,当我
我有点理解这个错误。 但是我该如何解决呢? 有没有办法创建一个对应于本地时间的
我猜你的前端的
当您调用
要将日期时间实际转换为另一个时区,您需要使用
1 2 | time_from_frontend = time_from_frontend.replace(tzinfo=pytz.timezone('UTC')) converted_server_time = time_from_frontend.astimezone(my_timezone) |
获取给定时区当前时间的正确方法是使用
1 2 3 4 5 | #!/usr/bin/env python from datetime import datetime import tzlocal # $ pip install tzlocal local_time = datetime.now(tzlocal.get_localzone()) |
即使在DST转换期间,当本地时间可能不明确时也是如此(在这种情况下,使用朴素的
您的代码中存在几个问题:
-
不要使用
naive_dt.replace(tzinfo=tz) ,其中tz 具有非固定的utc偏移量。请改用tz.localize(naive_dt, is_dst=None) -
您的问题中的时差表明
time_from_frontend 可能是UTC(不是您当地的时区),正如@Brendan Abel建议的那样。要将其与当前时间进行比较,如果time_from_frontend 是表示UTC时间的天真日期时间对象,则可以使用datetime.utcnow() :1time_diff = datetime.utcnow() - time_from_frontend要获得时区感知日期时间,可以将
.replace() 与UTC时区一起使用(utc偏移量是固定的 - 它始终为零),:1frontend_time = time_from_frontend.replace(tzinfo=pytz.utc)如果两个datetime对象都是时区感知的,那么减法也可以:
1time_diff = local_time - frontend_time
也可以看看:
- 如何在Python中获取当前时间
- Python:如何获得"timezone aware"的datetime.today()值?