Python`strtime`打印时是否缺少“T”和“Z”?

2024-04-20 10:24:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我错过了什么

这是为什么…

import datetime

start_date = '2020-10-01T00:00:00Z'
start_date_obj = datetime.datetime.strptime(start_date, '%Y-%m-%dT%H:%M:%SZ')

print(start_date_obj)

…结果:2020-10-01 00:00:00

…而不是:2020-10-01T00:00:00Z

输出中的“T”和“Z”在哪里


Tags: importobjdatetimedatestartprintszstrptime
2条回答

Z表示UTC,因此您应该使用strptime%z指令解析到aware datetime对象:

from datetime import datetime

s = '2020-10-01T00:00:00Z'
dt = datetime.strptime(s, '%Y-%m-%dT%H:%M:%S%z')
print(dt)
# 2020-10-01 00:00:00+00:00

或者fromisoformat加上一点hack

dt = datetime.fromisoformat(s.replace('Z', '+00:00'))
print(dt)
# 2020-10-01 00:00:00+00:00

在转换回字符串时,可以执行相同的操作:

out = dt.isoformat().replace('+00:00', 'Z')
print(out)
# 2020-10-01T00:00:00Z

strftime不会给您Z,但例如UTC

out = dt.strftime('%Y-%m-%dT%H:%M:%S %Z')
print(out)
# 2020-10-01T00:00:00 UTC

无视。显然,我需要将datetime对象转换回字符串(?),以便更好地打印

import datetime

start_date = '2020-10-01T00:00:00Z'
start_date_obj = datetime.datetime.strptime(start_date, '%Y-%m-%dT%H:%M:%SZ')
start_date_printable = datetime.datetime.strftime(start_date_obj, '%Y-%m-%dT%H:%M:%SZ')

print(start_date_printable)

结果为:2020-10-01T00:00:00Z

相关问题 更多 >