我正在尝试编写一个Python函数,以将传入的时间戳标准化为yyyy-mm-ddThh:mm+/-tz offset
。
示例:
def format_ts(ts):
beg_format = [
'%H:%M%a, %b %d, %Y %Z',
'%a, %d %b %Y %H:%M:%S %z',
]
end_format = '%Y-%m-%dT%H:%M %z'
try:
for f in beg_format:
if datetime.strptime(ts, f):
ts_fmt = datetime.strptime(ts, f)
ts_fmt = ts_fmt.strftime(end_format)
return ts_fmt
except:
pass
ts = [
'08:27Sun, Dec 19, 2021 IST',
'Sun, 19 Dec 2021 02:28:56 +0000'
]
for t in ts:
formatted_ts = format_ts(t)
print(formatted_ts)
问题:
- IIRC,我不应该依赖失败(
pass
(,而是应该捕获异常并处理 - 上面的函数通过所有格式迭代所有时间戳(慢速(
- 除非我遗漏了什么,否则
IST
不会被%Z
读取 - 由于某些原因,
'%a, %d %b %Y %H:%M:%S %z'
不适用于ts[1]
的正确格式
问题:其他人如何在Python中处理此类问题?
strptime的字符串表示似乎不支持您的时区。您可以使用带有时区的dateutil解析器来克服这一问题。
from dateutil import parser, tz
ts = [
'08:27Sun, Dec 19, 2021 IST',
'Sun, 19 Dec 2021 02:28:56 +0000'
]
def format_ts(ts):
return [parser.parse(t, tzinfos={'IST':tz.gettz('Asia/Calcutta')}) for t in ts]
format_ts(ts)
输出
[datetime.datetime(2021, 12, 19, 8, 27, tzinfo=tzfile('Asia/Calcutta')),
datetime.datetime(2021, 12, 19, 2, 28, 56, tzinfo=tzutc())]