我正在使用'2014.2'
版pytz
。我正在使用以下过程将Asia/Kuwait
时区(即本地时间)转换为UTC
时间:
>>> from_date = "2014/05/06 17:07"
>>> from_date = dateutil.parser.parse(from_date)
>>> utc=timezone('UTC')
>>> from_date = from_date.replace(tzinfo=timezone('Asia/Kuwait')).astimezone(utc)
>>> from_date
datetime.datetime(2014, 5, 6, 13, 55, tzinfo=<UTC>)
>>> from_date.strftime("%b %d %Y %H:%M:%S" )
'May 06 2014 13:55:00'
我发现的实际UTC时间为May 06 2014 14:06:00
:http://www.worldtimeserver.com/current_time_in_UTC.aspx为什么pytz
没有完全转换为实际时间。如您所见,10-11 minutes.
答案 0 :(得分:8)
请勿将datetime.replace()
与pytz
时区一起使用。来自pytz
documentation:
不幸的是,对于许多时区,使用标准日期时间构造函数的'tzinfo参数''与pytz不起作用。
它不起作用的原因是pytz
时区包含历史数据,datetime
无法处理这些数据。
请改用专用的timezone.localize()
方法:
>>> import dateutil.parser
>>> from pytz import timezone
>>> from_date = "2014/05/06 17:07"
>>> from_date = dateutil.parser.parse(from_date)
>>> from_date = timezone('Asia/Kuwait').localize(from_date).astimezone(timezone('UTC'))
>>> from_date
datetime.datetime(2014, 5, 6, 14, 7, tzinfo=<UTC>)
>>> from_date.strftime("%b %d %Y %H:%M:%S" )
'May 06 2014 14:07:00'
timezone.localize()
方法正确地将时区应用于天真的datetime
对象。