[英]Convert string with timezone included into datetime object
我有以下字符串格式date = 'Jun 8, 2021 PDT'
。 我正在嘗試將該字符串轉換為datetime
時間 object。 現在我有它:
dt_o = dt.strptime(date, '%b %d, %Y')
這讓我幾乎一直到那里,但我仍然收到以下錯誤:
ValueError: unconverted data remains: PDT
。
有沒有辦法在datetime
時間 object 的原始創建中包含'PDT'
? 我的另一個選擇是剝離'PDT'
的字符串並創建一個不知道 object 的時區。
dt_o = dt.strptime(date.rsplit(None, 1)[0], '%b %d, %Y')
給了我一個 object of: datetime.datetime(2021, 6, 8, 0, 0)
。
有沒有辦法可以應用PDT
時區? 我需要能夠從字符串date.rsplit(None, 1)[1]
轉換它,因為它並不總是PDT
%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)
給
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'
你檢查過文檔嗎?
dt_o = dt.strptime(date, '%b %d, %Y %Z')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.