2024-04-20 10:24:13 发布
网友
我错过了什么
这是为什么…
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-01 00:00:00
…而不是:2020-10-01T00:00:00Z
2020-10-01T00:00:00Z
输出中的“T”和“Z”在哪里
Z表示UTC,因此您应该使用strptime和%z指令解析到aware datetime对象:
strptime
%z
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:
fromisoformat
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:
strftime
Z
UTC
out = dt.strftime('%Y-%m-%dT%H:%M:%S %Z') print(out) # 2020-10-01T00:00:00 UTC
无视。显然,我需要将datetime对象转换回字符串(?),以便更好地打印
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
Z表示UTC,因此您应该使用
strptime
和%z
指令解析到aware datetime对象:或者
fromisoformat
加上一点hack:在转换回字符串时,可以执行相同的操作:
strftime
不会给您Z
,但例如UTC
:无视。显然,我需要将
datetime
对象转换回字符串(?),以便更好地打印结果为:
2020-10-01T00:00:00Z
相关问题 更多 >
编程相关推荐