假设我在请求中收到一个任意的日期时间对象,就像这样,它可能来自任何可能的时区 - 我不知道是哪一个。 举个例子,假装它来自东海岸。
import pytz
from colander import iso8601
...
ests1 = iso8601.parse_date('2016-04-01T00:00:00.0000-04:00')
假设ests1是输入的对象
利用pytz模块,我可以查找一些关于它所在时区的信息
etz = ests1.timetz() # 00:00:00-04:00
etzi = ests1.tzinfo # <FixedOffset '-04:00' datetime.timedelta(-1, 72000)>
etzn = ests1.tzname() # '-04:00' # EST
edst = ests1.dst() # '0:00:00'
请注意,无论ests1是什么日期 - dst()似乎总是返回相同的值。
我想要做这样一件事:
psts1 = pytz.timezone(etzn
).localize(dtime.datetime.fromtimestamp(ests1)
).astimezone(pytz.timezone('US/Pacific'))
但这只会导致
UnknownTimeZoneError: '-04:00'
我也尝试过这个方法:
def convert_dt_to_pstz(dt):
pstoffset = -25200 # -7 * 60 * 60 - but what about DST? how do we tell which offset to use? -8 or -7
return dt.astimezone(tzoffset(None,pstoffset)) # convert to PST
但问题在于我不知道如何判断日期是否需要进行夏令时调整。
我也尝试过这个方法:
utc_date = ests1.astimezone(pytz.utc) # 2016-04-01T04:00:00+00:00
ptz = pytz.timezone('US/Pacific')
new_date = utc_date.replace(tzinfo=ptz) # 2016-04-01T04:00:00-07:53
但是看一下new_date的奇怪结果:-07:53??
请注意,我无法使用任何与“现在”或服务器位置相对应的信息,因为它可能在任何地方。