给定一个变量,该变量包含巴黎时区的日期时间2000-01-01 00:01(冬季afaik中为UTC + 2):
datetime.datetime(2000, 1, 1, 0, 1, tzinfo=pytz.timezone('Europe/Paris'))
我希望转换为UTC会导致日期时间为1999-12-31 22:01,但是却得到了:
datetime.datetime(2000, 1, 1, 0, 1, tzinfo=pytz.timezone('Europe/Paris')).astimezone(pytz.utc) datetime.datetime(1999, 12, 31, 23, 52, tzinfo=<UTC>)
我想念什么?
谢谢
不幸的是 ,在许多时区使用tzinfo标准datetime构造函数的参数“不起作用” pytz。 >>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=amsterdam).strftime(fmt) '2002-10-27 12:00:00 LMT+0020' 但是对于没有夏令时转换的时区来说是安全的,例如UTC: >>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=pytz.utc).strftime(fmt) '2002-10-27 12:00:00 UTC+0000'
不幸的是 ,在许多时区使用tzinfo标准datetime构造函数的参数“不起作用” pytz。
tzinfo
datetime
pytz
>>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=amsterdam).strftime(fmt) '2002-10-27 12:00:00 LMT+0020'
但是对于没有夏令时转换的时区来说是安全的,例如UTC:
>>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=pytz.utc).strftime(fmt) '2002-10-27 12:00:00 UTC+0000'
您会注意到:
>>> datetime.datetime(2000, 1, 1, 0, 1, tzinfo=pytz.timezone('Europe/Paris')) datetime.datetime(2000, 1, 1, 0, 1, tzinfo=<DstTzInfo 'Europe/Paris' LMT+0:09:00 STD>)
“ LMT + 0:09:00 STD”…?! 那是历史的偏移,不是当前的标准。
pytz不能正确处理传回的时区捆绑包(包含永远的所有历史偏移量)datetime,它选择一些随机的(可能是 第一个 可能的)偏移量,而不是与实际时间相关的偏移量。可以说,由于它需要首先正确地解释时间,因此不能从时区束中选择正确的时间偏移。
该库仅支持构建本地时间的两种方式。第一种是使用库localize()提供的方法pytz。这用于本地化天真datetime(datetime没有时区信息): >>> loc_dt = eastern.localize(datetime(2002, 10, 27, 6, 0, 0)) >>> print(loc_dt.strftime(fmt)) 2002-10-27 06:00:00 EST-0500 建立本地化时间的第二种方法是使用标准astimezone()方法转换现有的本地化时间: >>> ams_dt = loc_dt.astimezone(amsterdam) >>> ams_dt.strftime(fmt) '2002-10-27 12:00:00 CET+0100' http://pytz.sourceforge.net
该库仅支持构建本地时间的两种方式。第一种是使用库localize()提供的方法pytz。这用于本地化天真datetime(datetime没有时区信息):
localize()
>>> loc_dt = eastern.localize(datetime(2002, 10, 27, 6, 0, 0)) >>> print(loc_dt.strftime(fmt)) 2002-10-27 06:00:00 EST-0500
建立本地化时间的第二种方法是使用标准astimezone()方法转换现有的本地化时间:
astimezone()
>>> ams_dt = loc_dt.astimezone(amsterdam) >>> ams_dt.strftime(fmt) '2002-10-27 12:00:00 CET+0100'
http://pytz.sourceforge.net