Python中获取Zulu时间戳的标准方法是什么?
嘿,这个问题我之前做Python客户端对接的时候也踩过坑!其实Python标准库完全能搞定,不用手动拼接字符串那么麻烦,给你两种靠谱的方法:
方法一:Python 3.7+ 推荐方案
现在大部分项目都用3.7以上的Python版本了,直接用带时区的datetime对象配合isoformat就能轻松生成目标格式:
from datetime import datetime, timezone # 获取带UTC时区的当前时间 utc_now = datetime.now(timezone.utc) # 生成带毫秒的ISO格式,再把时区标识+00:00替换成Z(两者在ISO 8601里是等价的) formatted_timestamp = utc_now.isoformat(timespec='milliseconds').replace('+00:00', 'Z') print(formatted_timestamp) # 输出类似:2024-05-20T14:22:35.456Z
这里的timespec='milliseconds'是用来指定保留三位毫秒数,刚好匹配你要的格式;替换+00:00为Z完全符合ISO 8601标准,不是野路子哦~
方法二:兼容Python 3.6及以下版本
如果你的项目还在使用较老的Python版本,timespec参数还没出现,可以用strftime来格式化:
from datetime import datetime, timezone utc_now = datetime.now(timezone.utc) # %f是微秒,取前三位就是毫秒,再拼接Z formatted_timestamp = utc_now.strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z' print(formatted_timestamp) # 同样输出带Z的UTC时间戳
额外小技巧:序列化JSON时自动处理
如果是要把时间戳放到JSON里传给服务器,可以自定义一个JSON编码器,避免每次手动格式化:
from datetime import datetime, timezone import json class UTCDateEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, datetime): # 确保时间对象带UTC时区 if obj.tzinfo is None: obj = obj.replace(tzinfo=timezone.utc) return obj.isoformat(timespec='milliseconds').replace('+00:00', 'Z') return super().default(obj) # 使用示例 request_data = {"event_time": datetime.now(timezone.utc)} print(json.dumps(request_data, cls=UTCDateEncoder)) # 输出:{"event_time": "2024-05-20T14:25:10.789Z"}
其实Python的datetime设计是偏向严谨的,用+00:00表示UTC是标准写法,而Z是它的别名,所以替换操作完全合理,不像网上那种手动插T和Z的野方案~
内容的提问来源于stack exchange,提问作者MatanRubin
相关产品推荐
相关产品推荐

