Python使用strptime转换带T、Z和微秒的字符串时间戳为datetime对象报错
解析失败的核心原因
- 年份占位符使用错误:
%y对应两位短年份(如21代表2021年),无法匹配四位长年份2021,长年份需使用%Y占位符 - 缺失小数秒(微秒)的匹配规则:时间戳在秒数后附带了微秒段
.60918,原格式化串没有对应这部分的占位符,会导致字符串长度完全不匹配 - 关于
T、Z字符的说明:二者是ISO 8601时间格式的固定字面标记,不需要特殊转义,只要在格式化串中保持和时间戳一致的位置即可,原代码里这两个字符的位置写法本身没有问题
修正后可直接运行的代码
import datetime # 修正点:将%y替换为%Y,补充微秒段的匹配占位符.%f formater = "%Y-%m-%dT%H:%M:%S.%fZ" str_timestamp = "2021-03-13T18:27:37.60918Z" timestamp = datetime.datetime.strptime(str_timestamp, formater) print(timestamp)
运行输出
2021-03-13 18:27:37.609180
补充说明:Python内置的
%f占位符可自动适配1-6位长度的小数秒,即便后续遇到秒后附带3位毫秒值、6位微秒值的同类时间戳,也无需修改格式化串即可正常解析。
内容的提问来源于stack exchange,提问作者Brandon Nadeau
相关产品推荐
相关产品推荐

