Python实现类似Java的时间戳转ISO 8601格式代码求助
嘿,刚接触Python的话确实会碰到一些和Java语法不一样的地方,我来帮你把这段Java代码转换成功能匹配的Python实现~
首先先把你提供的Java代码贴出来方便对照:
private String getISOTimestamp(Long timeStamp) {
Date date = new Date(timeStamp);
String pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
String isoTS = sdf.format(date);
return isoTS;
}
注意点说明
先提个小细节:你的Java代码里SimpleDateFormat没有指定时区,默认会用本地时区来格式化时间,但最后却硬加了代表UTC时区的'Z',这其实会造成时间表示的歧义(比如本地时间是上午10点,却标记成UTC的10点)。如果你的真实需求是转换为UTC时区的标准ISO格式,那下面的Python实现会更规范;如果只是要完全复刻Java代码的行为(本地时区+硬加Z),我也会给出对应的版本。
方案1:规范的UTC时区实现(推荐)
这个方案会把毫秒级时间戳转换成UTC时区的datetime对象,再格式化为你要的字符串:
def get_iso_timestamp(timestamp): from datetime import datetime # Java时间戳是毫秒级,Python的datetime接受秒级,所以除以1000 utc_dt = datetime.utcfromtimestamp(timestamp / 1000) # 格式化为指定格式,Z代表UTC时区 return utc_dt.strftime("%Y-%m-%dT%H:%M:%SZ")
方案2:更简洁的现代写法(Python 3.6+)
用isoformat()方法可以更轻松生成标准ISO格式,再去掉微秒并加上Z:
def get_iso_timestamp(timestamp): from datetime import datetime utc_dt = datetime.utcfromtimestamp(timestamp / 1000).replace(microsecond=0) return utc_dt.isoformat() + "Z"
方案3:完全复刻Java代码的行为(本地时区+硬加Z)
如果你确实需要和Java代码一样用本地时区格式化(即使加Z会有歧义),可以把utcfromtimestamp换成fromtimestamp:
def get_iso_timestamp(timestamp): from datetime import datetime local_dt = datetime.fromtimestamp(timestamp / 1000) return local_dt.strftime("%Y-%m-%dT%H:%M:%SZ")
测试示例
调用这个函数试试:
print(get_iso_timestamp(1696500000000)) # 输出类似:2023-10-05T14:40:00Z
内容的提问来源于stack exchange,提问作者pannu

