import pytz,datetime
tz1 = pytz.timezone('Asia/Shanghai')
tz1
<DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>
>>> str(tz1)
'Asia/Shanghai'1.如何从LMT+8:06:00的输出中获得tz1的字符串?
fmt = '%Y-%m-%d %H:%M:%S %Z%z'
dt1 = tz1.localize(datetime.datetime(2002, 10, 27, 6, 0, 0))
print(dt1.strftime(fmt))
2002-10-27 06:00:00 CST+08002.如何获得时区的所有缩写,如2002-10-27 06:00:00 CST+0800?中的CST等三个上字符组成的时区。
列表(pytz.country_names)获取国家的所有缩写,列表(pytz.all_timezones)获取所有时区。
list(pytz.all_timezones)
list(pytz.country_names)发布于 2014-08-31 16:00:12
1.如何从LMT+8:06:00的输出中获得tz1的字符串?
单个pytz.timezone('Asia/Shanghai')对象可能对应于几个不同的tzinfo对象(不同的tzname()、dst()和/或utcoffset())。tz1的默认表示形式显示了这样的对象之一。您需要一个具体的日期才能得到正确的tzinfo:
>>> from datetime import datetime
>>> import pytz
>>> tz = pytz.timezone('Asia/Shanghai')
>>> tz
<DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>
>>> fmt = '%Y-%m-%d %H:%M:%S %Z%z'
>>> tz.localize(datetime(2002, 10, 27, 6, 0, 0), is_dst=None).strftime(fmt)
'2002-10-27 06:00:00 CST+0800'
>>> tz.localize(datetime(1902, 10, 27, 6, 0, 0), is_dst=None).strftime(fmt)
'1902-10-27 06:00:00 LMT+0806'也就是说,亚洲/上海在1902年有+0806世界协调时抵消。
2.如何获得由三个上字符组成的时区的所有缩写,如2002年的CST -10-27 06:00 CST+0800?
如果您有一个感知的datetime对象,那么只需调用它的.tzname()方法或显式地将日期传递给时区:
>>> tz.tzname(datetime(2002, 10, 27, 6, 0, 0), is_dst=None)
'CST'没有公共API来枚举给定zoneinfo时区的所有可能的tzname()值。您可以使用DstTzInfo._transition_info属性来获得值(没有来自遥远未来的值(出于显而易见的原因)):
>>> datetime.now(tz).tzname()
'CST'
>>> {tzname for _, _, tzname in getattr(tz, '_transition_info', [])}
set(['CDT', 'CST', 'LMT'])https://stackoverflow.com/questions/25349444
复制相似问题