我正在使用Python标准库中的the datetime.datetime
class。我希望使用UTC时区构造此类的实例。为此,我认为我需要将tzinfo
参数作为datetime
构造函数传递给the tzinfo
class的某个实例。
The documentation for the tzinfo
class说:
tzinfo
是一个抽象基类,意味着不应该直接实例化此类。您需要派生一个具体的子类,并且(至少)提供您使用的tzinfo
方法所需的标准datetime
方法的实现。datetime
模块不提供tzinfo
的任何具体子类。
现在我很难过。我想做的就是代表" UTC"。我应该能够使用大约三个字符来做到这一点,比如这个
import timezones
...
t = datetime(2015, 2, 1, 15, 16, 17, 345, timezones.UTC)
简而言之,我不会按照文档告诉我的那样去做。那么我的另类选择是什么呢?
答案 0 :(得分:26)
自Python 3.2以来,stdlib中有固定偏移时区:
from datetime import datetime, timezone
t = datetime(2015, 2, 1, 15, 16, 17, 345, tzinfo=timezone.utc)
虽然在早期版本上实现utc时区很容易:
from datetime import tzinfo, timedelta, datetime
ZERO = timedelta(0)
class UTCtzinfo(tzinfo):
def utcoffset(self, dt):
return ZERO
def tzname(self, dt):
return "UTC"
def dst(self, dt):
return ZERO
utc = UTCtzinfo()
t = datetime(2015, 2, 1, 15, 16, 17, 345, tzinfo=utc)
答案 1 :(得分:3)
我在pytz中使用了很多,并且对此模块非常满意。
<强> pytz 强>
pytz
将Olsontz
数据库带入Python。这个库允许 使用Python 2.4进行准确且跨平台时区计算 或更高。它也最终解决了模糊时代的问题 夏令时的时间,你可以在Python中阅读更多 图书馆参考(datetime.tzinfo
)。
我还建议您阅读:Understanding DateTime, tzinfo, timedelta & TimeZone Conversions in python