如何用Python生成指定格式时间戳?解析该格式报错求解
Python时间戳生成与格式解析错误处理
问题说明
- 需要生成格式为
2023-03-24T12:02:20.1273789+01:00的时间戳 - 使用以下代码解析该格式字符串时触发报错:
formatted_timestamp = datetime.strptime(timestamp_string, '%Y-%m-%dT%H:%M:%S.%f%z').strftime( '%Y-%m-%d %H:%M:%S')
报错信息:
error: time data '2023-03-24T12:02:20.1273789+01:00' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'
报错原因
Python datetime 模块的 %f 格式符仅支持匹配最多6位微秒,但目标时间字符串的微秒部分是7位(1273789),导致格式匹配失败。
解决方案
1. 生成指定格式的时间戳
Python原生datetime的微秒最多保留6位,要生成7位微秒的格式,可通过字符串拼接实现:
from datetime import datetime # 获取带时区的当前时间(示例时区为+01:00) now = datetime.now().astimezone() # 拆分iso格式的各部分 date_time, tz = now.isoformat(timespec='microseconds').split('+') date_part, micro6 = date_time.split('.') # 将6位微秒补为7位(此处取前6位后补0,也可根据需求调整精度) micro7 = f"{micro6}0"[:7] # 拼接成目标格式 target_timestamp = f"{date_part}.{micro7}+{tz}" print(target_timestamp)
2. 正确解析7位微秒的时间字符串
原生方法(无需第三方库)
截取微秒部分的前6位,适配%f格式符的限制:
from datetime import datetime timestamp_string = '2023-03-24T12:02:20.1273789+01:00' # 拆分并调整微秒位数 if '.' in timestamp_string: before_dot, after_dot = timestamp_string.split('.', 1) micro_part, tz_part = after_dot.split('+', 1) # 保留前6位微秒 adjusted_micro = micro_part[:6] adjusted_str = f"{before_dot}.{adjusted_micro}+{tz_part}" else: adjusted_str = timestamp_string # 解析并转换格式 dt = datetime.strptime(adjusted_str, '%Y-%m-%dT%H:%M:%S.%f%z') formatted_result = dt.strftime('%Y-%m-%d %H:%M:%S') print(formatted_result)
第三方库简化方案(推荐)
使用python-dateutil库的isoparse方法,自动兼容7位微秒格式:
from dateutil import parser timestamp_string = '2023-03-24T12:02:20.1273789+01:00' dt = parser.isoparse(timestamp_string) formatted_result = dt.strftime('%Y-%m-%d %H:%M:%S') print(formatted_result)
注:需先安装库:
pip install python-dateutil
内容的提问来源于stack exchange,提问作者lass9509
相关产品推荐
相关产品推荐

