首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取LMT信息和所有pytz中的缩写。

获取LMT信息和所有pytz中的缩写。
EN

Stack Overflow用户
提问于 2014-08-17 13:06:18
回答 1查看 827关注 0票数 1
代码语言:javascript
复制
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的字符串?

代码语言:javascript
复制
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+0800

2.如何获得时区的所有缩写,如2002-10-27 06:00:00 CST+0800?中的CST等三个上字符组成的时区。

列表(pytz.country_names)获取国家的所有缩写,列表(pytz.all_timezones)获取所有时区。

代码语言:javascript
复制
list(pytz.all_timezones)
list(pytz.country_names)
EN

回答 1

Stack Overflow用户

发布于 2014-08-31 16:00:12

1.如何从LMT+8:06:00的输出中获得tz1的字符串?

单个pytz.timezone('Asia/Shanghai')对象可能对应于几个不同的tzinfo对象(不同的tzname()dst()和/或utcoffset())。tz1的默认表示形式显示了这样的对象之一。您需要一个具体的日期才能得到正确的tzinfo:

代码语言:javascript
复制
>>> 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()方法或显式地将日期传递给时区:

代码语言:javascript
复制
>>> tz.tzname(datetime(2002, 10, 27, 6, 0, 0), is_dst=None)
'CST'

没有公共API来枚举给定zoneinfo时区的所有可能的tzname()值。您可以使用DstTzInfo._transition_info属性来获得值(没有来自遥远未来的值(出于显而易见的原因)):

代码语言:javascript
复制
>>> datetime.now(tz).tzname()
'CST'
>>> {tzname for _, _, tzname in getattr(tz, '_transition_info', [])}
set(['CDT', 'CST', 'LMT'])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25349444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档