我可以像这样创建一个特定于时区的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
由两个值/属性表示:timedelta和一个字符串。但是我怎样才能访问它们?
我想做这样的事情
d.tzinfo.delta
d.tzinfo.name
我需要这些信息才能(de)将日期时间序列化为JSON。
我不想将第三方软件包用于此类解决方案。
答案 0 :(得分:2)
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()
返回值可能时区因各种历史信息而异。
答案 1 :(得分:1)