Python 测试datetime是否正确转换为UTC
正在尝试编写一个测试,以查看我的Python 测试datetime是否正确转换为UTC,python,python-3.x,timezone,pytz,Python,Python 3.x,Timezone,Pytz,正在尝试编写一个测试,以查看我的datetime转换是否正常工作并获得一些意外结果 import pytz from datetime import datetime def format_datetime(dt): if not dt.tzinfo: raise pytz.UnknownTimeZoneError('timezone not set') time = dt.astimezone(pytz.utc).strftime('%Y-%m-%dT%H:
datetime
转换是否正常工作并获得一些意外结果
import pytz
from datetime import datetime
def format_datetime(dt):
if not dt.tzinfo:
raise pytz.UnknownTimeZoneError('timezone not set')
time = dt.astimezone(pytz.utc).strftime('%Y-%m-%dT%H:%M:%S')
millis = dt.microsecond / 1000
string = '{}{}'.format(time, '.%03dZ' % millis)
return string
dt = datetime(2019, 3, 20, 1, 1, 1, 1)
# test 1
utc_dt = dt.replace(tzinfo=pytz.utc)
pdt_dt = dt.replace(tzinfo=pytz.timezone('America/Los_Angeles'))
print(format_datetime(utc_dt)) # 2019-03-20T01:01:01.000Z
print(format_datetime(pdt_dt)) # 2019-03-20T08:54:01.000Z
# test 2
utc_dt2 = dt.replace(tzinfo=pytz.utc)
pdt_dt2 = utc_dt2.astimezone(pytz.timezone('America/Los_Angeles'))
print(format_datetime(utc_dt2)) # 2019-03-20T01:01:01.000Z
print(format_datetime(pdt_dt2)) # 2019-03-20T01:01:01.000Z
我不明白为什么在第一个测试中
print(format\u datetime(pdt\u dt))
会更改分钟值,但在第二个测试中,分钟没有更改。(我理解为什么这两个例子的时间不同)。你不能只将pytz
时区分配给datetime
,你必须使用localize
或astimezone
:
utc_dt = pytz.utc.localize(dt)
pdt_dt = utc_dt.astimezone(pytz.timezone('America/Los_Angeles'))
这是因为时区可能会发生更改,而
pytz
zone对象包含整个历史记录,需要针对正确的时间段进行配置。简单的replace
不允许这样做。某些旧历史时段的分钟偏移量为奇数。您不能将pytz
时区分配给datetime
,您必须使用本地化
或astimezone
:
utc_dt = pytz.utc.localize(dt)
pdt_dt = utc_dt.astimezone(pytz.timezone('America/Los_Angeles'))
这是因为时区可能会发生更改,而pytz
zone对象包含整个历史记录,需要针对正确的时间段进行配置。简单的replace
不允许这样做。一些旧的历史时期会有奇数分钟的偏移量