Dan*_*l E 7 python timezone datetime utc
when I run this code:
#!/usr/bin/env python3
from datetime import datetime, timedelta
from dateutil import tz
from pytz import timezone
time = "2020-01-15 10:14:00"
time = datetime.strptime(time, "%Y-%m-%d %H:%M:%S")
print("time1 = " + str(time))
time = time.replace(tzinfo=timezone('America/New_York'))
print("time2 = " + str(time))
time = time.astimezone(tz.gettz('UTC')) # explicity convert to UTC time
print("time3 = " + str(time))
time = datetime.strftime(time, "%Y-%m-%d %H:%M:%S") # output format
print("done time4 = " + str(time))
Run Code Online (Sandbox Code Playgroud)
I get this output:
time1 = 2020-01-15 10:14:00
time2 = 2020-01-15 10:14:00-04:56
time3 = 2020-01-15 15:10:00+00:00
done time4 = 2020-01-15 15:10:00
Run Code Online (Sandbox Code Playgroud)
I would have expected the final time to be "2020-01-15 15:14:00" anyone have any ideas why it's off by 4 mintutes? I don't understand why the offset in time2 would by "-04:56" instead of "-05:00"
这个库不同于记录在案的用于 tzinfo 实现的 Python API;如果要创建本地挂钟时间,则需要使用本
localize()文档中记录的方法。此外,如果您对跨越 DST 边界的本地时间执行日期算术,则结果可能位于不正确的时区(即从 2002-10-27 1:00 EST 减去 1 分钟,您会得到 2002-10-27 0: 59 EST 而不是正确的 2002-10-27 1:59 EDT)。
因此,您错误地使用了 pytz。
以下是正确和错误的代码以下代码显示了您使用 pytz ( datetime.replace(tzinfo=pytz.timezone)) 的结果,以及将 pytz 与 datetime ( pytz.timezone.localize(datetime))一起使用的推荐方法。
from datetime import datetime, date, time, timezone
from dateutil import tz
import pytz
d = date(2019, 1, 27)
t = time(19, 32, 00)
t1 = datetime.combine(d, t)
t1_epoch = t1.timestamp()
print("t1_epoch " + str(t1_epoch))
print("t1 " + str(t1))
# your approach/code
nytz = pytz.timezone('America/New_York')
t3 = t1.replace(tzinfo=nytz)
t3_epoch = t3.timestamp()
print("t3_epoch " + str(t3_epoch))
print("t3 " + str(t3))
# recommended approach/code using localize
nytz = pytz.timezone('America/New_York')
t6 = nytz.localize(t1)
t6_epoch = t6.timestamp()
print("t6_epoch " + str(t6_epoch))
print("t6 " + str(t6))
Run Code Online (Sandbox Code Playgroud)
上面代码的输出:
t1_epoch 1548617520.0
t1 2019-01-27 19:32:00
t3_epoch 1548635280.0
t3 2019-01-27 19:32:00-04:56
t6_epoch 1548635520.0
t6 2019-01-27 19:32:00-05:00
Run Code Online (Sandbox Code Playgroud)
t3就是你在做什么,它给出了不正确的偏移量(-4:56)。请注意,在这种情况下,POSIX 时间也不正确。根据定义,POSIX 时间不随时区变化。
t6已使用pytz.timezone.localize()方法创建,并提供正确的 UTC 偏移量 (-5:00)。
更新:更新了答案的语言,因为一位用户发现答案令人困惑。
| 归档时间: |
|
| 查看次数: |
1159 次 |
| 最近记录: |