我可以像这样创建一个特定于时区的datetime
对象
import datetime
d = datetime.datetime.now().astimezone()
结果是
datetime.datetime(2018, 4, 2, 15, 12, 2, 807451, tzinfo=datetime.timezone(datetime.timedelta(0, 7200), 'CEST'))
看起来
tzinfo
由两个值/属性表示:一个时间增量和一个字符串。但是我该如何访问它们?我想做这样的事情
d.tzinfo.delta
d.tzinfo.name
我需要这些信息,才能将日期时间与JSON进行反序列化。
我不想将第三方软件包用于此类解决方案。
最佳答案
在这种情况下,tzinfo
是datetime.timezone()
class的实例:
timezone
类是tzinfo
的子类,每个实例代表一个时区,该时区由与UTC的固定偏移量定义。
您可以使用tzinfo.utcoffset()
和tzinfo.utcname()
方法来访问变化量和名称。对于timezone()
实例,将忽略每个采用的参数,但是通常您将传入它们附加到的datetime
实例:
d.tzinfo.utcoffset(d)
d.tzinfo.utcname(d)
您通常会在
datetime.datetime
实例上调用这些实例,该实例具有相同的方法(但不带任何参数),然后这些实例将处理将正确的参数传递给所包含的tzinfo
属性上的方法。演示:
>>> import datetime
>>> d = datetime.datetime.now().astimezone()
>>> d.utcoffset()
datetime.timedelta(seconds=7200)
>>> d.tzname()
'CEST'
>>> d.tzinfo.utcoffset(d)
datetime.timedelta(seconds=7200)
>>> d.tzinfo.utcoffset(d) is d.utcoffset() # they are the same object
True
datetime.timezone()
子类只是tzinfo
时区的一种实现,诸如pytz之类的第三方库提供了它们自己的库,并且utcoffset()
和tzname()
返回值对于带有历史信息的时区可能会有所不同。