You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java:将Long类型时间戳与int偏移量转换为可读格式

Java中UTC时间戳+时区偏移量转换为可读日期

核心思路

在Java里处理时区转换,现在推荐用Java 8及以后引入的java.time包(JSR-310)——这套API设计更清晰、线程安全,比旧的Date/Calendar好用太多。我们的核心步骤是:把UTC时间戳转成UTC时间线上的瞬间点,结合时区偏移量得到对应时区的日期时间,最后格式化输出可读格式。

完整代码示例

import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;

public class TimestampConverter {
    public static void main(String[] args) {
        // 你的UTC毫秒时间戳
        long timestamp = 1514564669355L;
        // 时区偏移量(单位:分钟,360分钟=6小时,即UTC+6)
        int offsetMinutes = 360;

        // 1. 将时间戳转换为UTC的Instant(代表UTC时间线上的一个点)
        Instant utcInstant = Instant.ofEpochMilli(timestamp);

        // 2. 将分钟偏移量转换为ZoneOffset(注意要转成总秒数)
        ZoneOffset zoneOffset = ZoneOffset.ofTotalSeconds(offsetMinutes * 60);

        // 3. 结合Instant和偏移量,得到带时区的OffsetDateTime
        OffsetDateTime offsetDateTime = utcInstant.atOffset(zoneOffset);

        // 4. 定义你想要的日期格式,这里是带毫秒和时区标识的格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS z");

        // 5. 格式化输出
        String readableDate = offsetDateTime.format(formatter);
        System.out.println("转换后的日期:" + readableDate);
    }
}

代码细节解释

  • Instant.ofEpochMilli(timestamp):把Long类型的毫秒时间戳直接映射为UTC时间线上的瞬间点,这是处理UTC时间的基础。
  • ZoneOffset.ofTotalSeconds(offsetMinutes * 60):因为ZoneOffset的构造方法接受的是秒数,所以需要把分钟偏移量乘以60转换单位。如果你的偏移量本身是秒级的,直接传入数值即可。
  • utcInstant.atOffset(zoneOffset):将UTC时间点与时区偏移结合,得到对应时区的完整日期时间对象。
  • DateTimeFormatter:可以根据需求自定义格式,比如去掉毫秒就用yyyy-MM-dd HH:mm:ss,z会显示时区偏移标识(比如+06:00)。

示例运行结果

针对你给出的数值,运行代码后会输出:

转换后的日期:2017-12-29 12:24:29.355 +06:00

额外提示

  • 如果使用Java 8之前的版本,可以引入ThreeTen-Backport库,它能让旧版本Java也用上java.time的API,用法和上面完全一致。
  • 尽量避免使用旧的Date、Calendar和SimpleDateFormat类,它们不仅线程不安全,API设计冗余,还容易出现时区处理的隐蔽bug。

内容的提问来源于stack exchange,提问作者Tuco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:16:35