Python 将包含时区的字符串转换为datetime对象

Python 将包含时区的字符串转换为datetime对象,python,datetime,timezone,Python,Datetime,Timezone,我有以下字符串格式-date='jun82021 PDT'。我正在尝试将该字符串转换为datetime对象。现在我在: dt_o=dt.strtime(日期,'%b%d,%Y') 这让我几乎一路走到那里,但我仍然得到以下错误: 值错误:未转换的数据仍然存在:PDT 是否有办法将'PDT'包含在datetime对象的原始创建中?。我的另一个选择是去掉'PDT'的字符串,并创建一个不知道时区的对象 dt_o=dt.strtime(date.rsplit(None,1)[0],'%b%d,%Y')给我

我有以下字符串格式-
date='jun82021 PDT'
。我正在尝试将该字符串转换为
datetime
对象。现在我在:

dt_o=dt.strtime(日期,'%b%d,%Y')

这让我几乎一路走到那里,但我仍然得到以下错误:

值错误:未转换的数据仍然存在:PDT

是否有办法将
'PDT'
包含在
datetime
对象的原始创建中?。我的另一个选择是去掉
'PDT'
的字符串,并创建一个不知道时区的对象

dt_o=dt.strtime(date.rsplit(None,1)[0],'%b%d,%Y')
给我一个对象:
datetime.datetime(2021,6,8,0,0)


有没有一种方法可以将
PDT
时区应用于此?我需要能够从字符串
date.rsplit(None,1)[1]
转换它,因为它不总是
PDT

您检查过文档了吗

dt_o = dt.strptime(date, '%b %d, %Y %Z')

常见的误解是,
%Z
可以解析任意缩写的时区名称。它不能。请特别参阅文档中的“注释”部分#6

你必须“用手”去做,因为很多缩写词都是模棱两可的。这里有一个选项,可以选择如何仅使用标准库来处理它:

from datetime import datetime
from zoneinfo import ZoneInfo

# we need to define which abbreviation corresponds to which time zone
zoneMapping = {'PDT' : ZoneInfo('America/Los_Angeles'),
               'PST' : ZoneInfo('America/Los_Angeles'),
               'CET' : ZoneInfo('Europe/Berlin'),
               'CEST': ZoneInfo('Europe/Berlin')}

# some example inputs; last should fail
timestrings = ('Jun 8, 2021 PDT', 'Feb 8, 2021 PST', 'Feb 8, 2021 CET',
               'Aug 9, 2020 WTF')

for t in timestrings:
    # we can split off the time zone abbreviation
    s, z = t.rsplit(' ', 1)
    # parse the first part to datetime object
    # and set the time zone; use dict.get if it should be None if not found
    dt = datetime.strptime(s, "%b %d, %Y").replace(tzinfo=zoneMapping[z])
    print(t, "->", dt)

给予


你的意思是
rsplit
而不是
rstrip
?相关:@azro是的,谢谢。更新。漂亮,谢谢!
Jun 8, 2021 PDT -> 2021-06-08 00:00:00-07:00
Feb 8, 2021 PST -> 2021-02-08 00:00:00-08:00
Feb 8, 2021 CET -> 2021-02-08 00:00:00+01:00

Traceback (most recent call last):

    dt = datetime.strptime(s, "%b %d, %Y").replace(tzinfo=zoneMapping[z])

KeyError: 'WTF'