簡體   English   中英

將包含時區的字符串轉換為日期時間 object

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM