2014-04-14 35 views
2

我有这行代码:这个tzinfo变量有什么问题?

datetime.datetime.fromtimestamp(0, "<DstTzInfo 'US/Pacific' PST-1 day, 16:00:00 STD>") 

它不断给我这个错误:

TypeError: tzinfo argument must be None or of a tzinfo subclass, not type 'str' 

什么是tzinfo,从哪里去了?

回答

10

错误有点不言自明:tzinfo参数需要tzinfo对象而不是字符串。但是,我会建议使用pytzpytz比标准库对时区的支持要强大得多。您可以使用pip install pytz进行安装。有关更多信息,请参阅the docs

>>> from datetime import datetime 
>>> import pytz 
>>> d = datetime.fromtimestamp(0) 
>>> pacific = pytz.timezone('US/Pacific') 
>>> pacific 
<DstTzInfo 'US/Pacific' PST-1 day, 16:00:00 STD> 
>>> pacific_date = pacific.localize(d) 
>>> pacific_date 
datetime.datetime(1969, 12, 31, 17, 0, tzinfo=<DstTzInfo 'US/Pacific' PST-1 day, 16:00:00 STD>) 
+0

注:使用'.localize()'可能引入[在结果歧义](HTTP://pytz.sourceforge .NET /#问题与 - 本地时间)。 [将时间戳转换为utc日期时间对象,然后将其转换为给定的时区](http://stackoverflow.com/a/23051332/4279)以避免它。 – jfs

1

为了POSIX时间戳转换为本地时区例如,'US/Pacific'

from datetime import datetime 
import pytz # $ pip install pytz 

timestamp = 0 # seconds since the Epoch 
local_dt = datetime.fromtimestamp(timestamp, pytz.timezone('US/Pacific'))