如何将带UTC时区的Python datetime转为带毫秒与Z时区的ISO8601时间戳字符串
更优的实现方法
方法1:用strftime直接格式化(全Python3版本兼容)
既然你的datetime对象已经是UTC时区,直接通过格式化字符串生成目标格式更直观,无需字符串替换操作:
from datetime import datetime, timezone utc_dt = datetime.now(timezone.utc) # %f 输出微秒,截取前三位得到毫秒,最后拼接Z标识 timestamp = utc_dt.strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3] + "Z"
这种方式逻辑清晰,避免了对isoformat输出格式的依赖,性能也更稳定。
方法2:优化你的原有实现(Python3.9+)
你的初始思路已经很简洁,用removesuffix替代replace会更严谨——它只会移除字符串末尾的+00:00,避免意外替换内容中其他位置的匹配片段:
from datetime import datetime, timezone timestamp = datetime.now(timezone.utc).isoformat(timespec="milliseconds").removesuffix("+00:00") + "Z"
方法3:极简格式化写法(Python3.6+)
直接把Z标识写进格式化字符串,再截断微秒到三位,一步到位:
from datetime import datetime, timezone utc_dt = datetime.now(timezone.utc) timestamp = utc_dt.strftime("%Y-%m-%dT%H:%M:%S.%fZ")[:-3]
补充说明
你问题里写的格式串%Y-%M-%DT%h:%m:%.3sZ存在几个格式符错误:小写m是月份、大写M是分钟;小写h是12小时制、大写H是24小时制;%.3s不是标准strftime格式。从你给出的示例输出看,实际需求是YYYY-MM-DDTHH:MM:SS.sssZ,上面三种方法都能精准生成该格式。
内容的提问来源于stack exchange,提问作者Afkaaja
相关产品推荐
相关产品推荐

