Python 访问datetime对象的时区信息

Python 访问datetime对象的时区信息,python,datetime,timezone,Python,Datetime,Timezone,我可以像这样创建一个特定于时区的datetime对象 import datetime d = datetime.datetime.now().astimezone() d.tzinfo.delta d.tzinfo.name 结果是 datetime.datetime(2018, 4, 2, 15, 12, 2, 807451, tzinfo=datetime.timezone(datetime.timedelta(0, 7200), 'CEST')) 看起来tzinfo由两个值/属性表示

我可以像这样创建一个特定于时区的
datetime
对象

import datetime
d = datetime.datetime.now().astimezone()
d.tzinfo.delta
d.tzinfo.name
结果是

datetime.datetime(2018, 4, 2, 15, 12, 2, 807451, tzinfo=datetime.timezone(datetime.timedelta(0, 7200), 'CEST'))
看起来
tzinfo
由两个值/属性表示:一个timedelta和一个字符串。但是我怎样才能访问它们呢? 我想做这样的事情

import datetime
d = datetime.datetime.now().astimezone()
d.tzinfo.delta
d.tzinfo.name
我需要这些信息,以便能够(反)序列化从JSON到JSON的日期时间


我不想将第三方软件包用于此类解决方案。

您询问的是datetime.tzinfo,它是一个抽象基类,如文档所示

datetime附带了一个名为datetime.timezone的tzinfo抽象基类的实现,该基类已记录在案


最后一个链接的下方是timezone.utcoffset和timezone.utcname上的文档,如果是时区,则可以通过这些文档访问您在tzinfo上询问的属性。然而,这并不是该抽象类的唯一实现。例如,如果您使用的是pytz时区,则需要阅读该时区上的文档。

tzinfo
在本例中是:

timezone
类是
tzinfo
的一个子类,其每个实例表示由UTC的固定偏移量定义的时区

您可以使用and
tzinfo.utcname()
方法访问增量和名称。对于
timezone()
实例,这些参数中的每一个都会被忽略,但通常您会传入它们所附加到的
datetime
实例:

d.tzinfo.utcoffset(d)
d.tzinfo.utcname(d)
您通常会在
datetime.datetime
实例上调用这些函数,该实例具有相同的方法(但不带参数),然后这些函数将处理将正确的参数传递给包含的
tzinfo
属性上的方法

演示:


datetime.timezone()
子类只是
tzinfo
时区的一个实现,像pytz这样的第三方库提供了自己的,
utcoffset()
tzname()
返回值可能因附加历史信息的时区而异。

既然您说您没有使用第三方软件包,我假设您只是使用datetime.timezone,在这种情况下,我最后给出的警告不适用于您。不过,如果您改变主意,以后开始使用第三方软件包,这可能会变得很重要。