将"PST"转换为"US/Pacific"以与 Pytz 一起使用



我正在尝试创建HTTP端点:

  1. 向用户返回在请求者的时区中给定月份创建的帖子的程序
  2. 另一个得到可能的post*

示例

(1( 在请求者所在时区的月份获取帖子

(2( 获得可能的职位月份

例如,如果用户在Sept-November中发帖,但在December中没有发帖,则Jan以后不会返回December。但它采用"PST"格式的时区,因为它执行SQL查询

问题

不幸的是,pytz,我用来获取月份的所有帖子的库,只接受格式为"US/Pacific"时区

问题

  1. "US/Pacific"的格式或字符串表示法是什么
  2. 如何在Python中将字符串格式"PST""UCT""CST"转换为它们各自的格式,如"US/Pacific"
  3. 这种类似"US/Pacific"的格式的名称是什么
  4. 有没有一种字典可以将"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的tzinfoAPI构建时区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参考本文处理时区

  1. 显示不同时区/国家/地区的日期时间
  2. 时区转换
  3. 不了解时区/天真到了解时区
  4. 更换问题

最新更新