毫秒级Epoch时间戳转字符串结果与预期不符问题咨询
毫秒级Epoch时间戳转换结果不符的原因排查
先明确核心问题:你的预期结果对应UTC时区的时间,但代码用了系统默认时区,导致转换结果出现偏移。
关键验证
1526581800000这个毫秒时间戳对应的UTC标准时间就是你要的18-May-2018 00:00:00。
问题根源
你代码里用了ZoneId.systemDefault(),也就是当前运行代码的系统默认时区。从实际输出17-May-2018 18:30:00反推,这个系统时区是UTC+5:30(比如印度标准时间IST)——当UTC时间是18号0点时,该时区的本地时间就是17号18:30,和你得到的结果完全匹配。
修复方案
- 如果要得到UTC时区的结果,直接指定
ZoneOffset.UTC替换系统默认时区:
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(1526581800000), ZoneOffset.UTC); System.out.println(localDateTime.format(DateTimeFormatter.ofPattern("dd-MMM-yyyy HH:mm:ss")));
- 如果需要转换到其他特定时区,明确指定对应的
ZoneId即可,比如东八区用ZoneId.of("Asia/Shanghai")。
内容的提问来源于stack exchange,提问作者Deepu Dubey
相关产品推荐
相关产品推荐

