我有一个字符串,我需要先将其转换为 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。
答案 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。