从时区感知字符串中提取 UTC 日期

时间:2021-05-26 14:43:40

标签: python python-3.x datetime

我有一个字符串,我需要先将其转换为 utc,然后从中提取日期。

times = '2021-04-15T21:53:00:000-06'

我首先要做的是:

datetime.datetime.strptime(times, "%Y-%m-%dT%H:%M:%S.%f%z")

它给了我一个例外:

<块引用>

ValueError: 时间数据 '2021-04-15T21:53:00-06' 格式不匹配 '%Y-%m-%dT%H:%M:%S.%f%z'

我想将时区替换为utc replace(tzinfo=datetime.timezone.utc) 并仅提取 yyyy-mm-dd。

1 个答案:

答案 0 :(得分:0)

假设格式在您的数据中是一致的(字符串的长度是恒定的),您可以进行一些字符串切片以分隔日期/时间和 UTC 偏移量。将第一个解析为 datetime 并将后者添加为从 timezone 构造的 timedelta。然后转换为UTC。

例如:

from datetime import datetime, timedelta, timezone

s = '2021-04-15T21:53:00:000-06'

# first part to datetime
dt = datetime.fromisoformat(s[:-3])

# set time zone
dt = dt.replace(tzinfo=timezone(timedelta(hours=int(s[-3:]))))

# to UTC
dt_utc = dt.astimezone(timezone.utc)

print(dt_utc.date())
# 2021-04-16

请注意,如果格式不一致,这将失败,例如如果某些字符串具有 +0530 而其他字符串只有例如-06

在这种情况下,另一种选择是使用 strptime,但这也需要修改输入。 %z 期望 ±HH:MM±HHMM,因此您可以添加像

这样的分钟
if len(s) == 26: # minutes missing
    s += '00'

dt = datetime.strptime(s, "%Y-%m-%dT%H:%M:%S:%f%z")

然后如上所述转换为 UTC。