Python时间戳转ISO格式逻辑迁移到Java时出现解析错误如何解决
问题根因
- 存在无效的格式转换流程:你将时间戳转成
Date对象后,使用默认SimpleDateFormat输出的是本地化格式的字符串(例如报错信息里的7/23/21 11:40 AM),该格式和DateTimeFormatter.ISO_LOCAL_DATE_TIME要求的标准ISO格式完全不匹配,因此抛出解析异常。 - 时间戳转换精度错误:
(long) 1627065646.444 * 1000会先把小数部分截断再乘1000,丢失毫秒精度。 - API混用逻辑冗余:同时使用了已过时的
Date、Timestamp类和Java 8+推荐的java.time新时间API,增加了不必要的转换步骤。
正确实现(和Python代码逻辑对齐,输出秒精度ISO格式时间)
直接通过java.time包完成转换,不需要来回格式化再解析:
// 从JSON获取的原始时间值 double jsonTime = 1627065646.444; // 取秒级时间戳,和Python timespec='seconds'参数效果对齐 long epochSecond = (long) jsonTime; // 转换为UTC时区的ISO格式字符串 String formattedTimeStamp = Instant.ofEpochSecond(epochSecond) .atOffset(ZoneOffset.UTC) .format(DateTimeFormatter.ISO_INSTANT);
如果需要保留毫秒精度,调整代码即可:
double jsonTime = 1627065646.444; long epochMilli = (long) (jsonTime * 1000); String formattedTimeStamp = Instant.ofEpochMilli(epochMilli) .atOffset(ZoneOffset.UTC) .format(DateTimeFormatter.ISO_INSTANT);
注意:如果原Python代码的
fromtimestamp使用的是本地时区而非UTC,将ZoneOffset.UTC替换为对应时区即可。
内容的提问来源于stack exchange,提问作者perplexedDev
相关产品推荐
相关产品推荐

