gpt4 book ai didi

python - 获取LMT信息以及pytz中的所有缩写tz

转载 作者:行者123 更新时间:2023-12-01 05:04:24 25 4
gpt4 key购买 nike

import pytz,datetime
tz1 = pytz.timezone('Asia/Shanghai')
tz1
<DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>
>>> str(tz1)
'Asia/Shanghai'

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

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等由3个大写字符组成的时区缩写?

list(pytz.country_names) 获取所有国家/地区的缩写,list(pytz.all_timezones) 获取所有时区。

list(pytz.all_timezones)
list(pytz.country_names)

最佳答案

1.how can i get the string of LMT+8:06:00 from the output of 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 UTC 偏移量。

<小时/>

2.how can i get all the abbrevations of timezone which is composed of 3 upper character such as CST in 2002-10-27 06:00:00 CST+0800?

如果您有一个已知的日期时间对象,则只需调用其 .tzname() 方法或显式将日期传递给时区:

>>> tz.tzname(datetime(2002, 10, 27, 6, 0, 0), is_dst=None)
'CST'

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

>>> datetime.now(tz).tzname()
'CST'
>>> {tzname for _, _, tzname in getattr(tz, '_transition_info', [])}
set(['CDT', 'CST', 'LMT'])

关于python - 获取LMT信息以及pytz中的所有缩写tz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25349444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com