我正在尝试创建HTTP端点:
- 向用户返回在请求者的时区中给定月份创建的帖子的程序
- 另一个得到月可能的post*
示例
(1( 在请求者所在时区的月份获取帖子
(2( 获得可能的职位月份
例如,如果用户在Sept-November
中发帖,但在December
中没有发帖,则Jan
以后不会返回December
。但它采用"PST"
格式的时区,因为它执行SQL查询。
问题
不幸的是,pytz
,我用来获取月份的所有帖子的库,只接受格式为"US/Pacific"
的时区。
问题
"US/Pacific"
的格式或字符串表示法是什么- 如何在Python中将字符串格式
"PST"
、"UCT"
或"CST"
转换为它们各自的格式,如"US/Pacific"
等 - 这种类似
"US/Pacific"
的格式的名称是什么 - 有没有一种字典可以将
"PST"
映射到"US/Pacific"
时区术语
如何定义、表示或引用时区?一些术语:
- UTC时间偏移(例如"UTC-08:00"(
- 关于ISO 8601日期/时间格式:时区指示符(例如"Z"或"-08"(
- 时区:规范名称
- 时区:缩写
(规范(名称
拼写出的时区名称或(tz名称(类似于";美国/太平洋";或";欧洲/巴黎";也被称为时区的规范名称。它们被用作IANA时区数据库中的密钥。在RFC 6557中,它们被称为";时区名称";。维基百科声称:
主要的首选区域名称。
另请参阅:
- ECMA:6.4时区名称
缩写
字母字符串文字如";UTC"PST";是时区的缩写。
时区之间的转换
通常,时区之间的转换是通过修改在ISO 8601中表示的UTC的偏移量来完成的-0800";(PST(,其从"PST"中减去8小时+0000〃;(UTC(。
另请参阅:
- 夏令时和时区最佳实践
使用pytz
时区进行转换
要将给定日期时间从UTC转换为目标时区(例如"美国/太平洋"(,请在源日期时间实例上使用astimezone(tz)
:
import datetime
from pytz import timezone, utc
utc_time = datetime.datetime.utcnow()
pst_tz = timezone('US/Pacific')
pst_time = utc_time.replace(tzinfo=utc).astimezone(pst_tz)
注:
- 使用pytz的
tzinfo
API构建时区tz
,例如,使用用于PST的timezone('PST8PDT')
或用于CST的timezone('US/Central')
- CCD_ 22是可选的并且将给定日期时间的时区重置为默认UTC
令人惊讶的是:;PST";在CCD_ 23中找不到缩写。最相似的是(在REPL中评估(:
>>> import pytz
>>> pytz.timezone('PST8PDT')
<DstTzInfo 'PST8PDT' PST-1 day, 16:00:00 STD>
>>> pytz.timezone('US/Pacific')
<DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>
>>> pytz.timezone('US/Central')
<DstTzInfo 'US/Central' LMT-1 day, 18:09:00 STD>
另请参阅:
- pytz-将UTC和时区转换为当地时间
- 有Pytz时区的列表吗
使用zoneinfo
进行转换(自3.9起(
根据Fuppes先生对";如何将时区与python中的datetime对象一起使用":
from datetime import datetime, timezone
from zoneinfo import ZoneInfo
utc_time = datetime(2012,11,10,9,0,0, tzinfo=timezone.utc)
cst_tz = ZoneInfo("US/Central")
cst_time = utc_time.astimezone(cst_tz)
# safely use `replace` to get the same wall time in a different tz:
pst_time = cst_time.replace(tzinfo=ZoneInfo("US/Pacific"))
print(utc_time.isoformat())
print(cst_time.isoformat())
print(pst_time.isoformat())
(以上代码未测试!(
另请参阅:
- 新的Python模块zoneinfo——IANA时区支持
- Paul Ganssle(2021(:停止使用utcnow和utcfromtimestamp,
python-dateutil
维护者的博客文章
import pytz
from datetime import datetime # timezone
print('The supported tz:', pytz.all_timezones, 'n')
# Show date-time for different timezone/country
# current date and time of NY
datetime_NY = datetime.now(pytz.timezone('America/New_York'))
print("NY:", datetime_NY.strftime("%m/%d/%Y, %H:%M:%S"))
# NY: 07/28/2021, 05:49:41
# Timezone Conversion
# Any timezone to UTC
NY_to_utc = datetime_NY.astimezone(pytz.utc)
print("NY_to_utc: ", NY_to_utc.strftime("%m/%d/%Y, %H:%M:%S"))
# NY_to_utc: 07/28/2021, 09:49:41
Naive和Aware datetime参考本文处理时区
- 显示不同时区/国家/地区的日期时间
- 时区转换
- 不了解时区/天真到了解时区
- 更换问题