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

Java中如何将TAI时间字符串转换为UTC或UNIX时间?

解决Java中TAI时间字符串转UTC/UNIX时间的方案

核心思路

输入的YYYY-MM-ddTHH:mm:ss.S格式字符串是TAI时间的日期时间表示,借助ThreeTen-Extra库可按以下步骤处理:

  1. 先按格式解析为LocalDateTime(仅处理格式,不关联时间尺度);
  2. 将LocalDateTime转换为TAI时间尺度下的TaiDateTime;
  3. 从TaiDateTime得到TaiInstant,再转换为UTC时间的Instant,最终可导出UNIX时间戳。

具体实现代码

import org.threeten.extra.TaiDateTime;
import org.threeten.extra.TaiInstant;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.Instant;

public class TaiToUtcConverter {
    public static void main(String[] args) {
        // 输入的TAI时间字符串
        String taiTimeStr = "2023-07-01T00:00:37.0";
        // 定义解析格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.S");
        
        // 1. 解析为LocalDateTime(仅处理格式)
        LocalDateTime taiLocal = LocalDateTime.parse(taiTimeStr, formatter);
        
        // 2. 转换为TAI时间尺度的TaiDateTime
        TaiDateTime taiDateTime = TaiDateTime.of(taiLocal.toLocalDate(), taiLocal.toLocalTime());
        
        // 3. 转换为TaiInstant,再转成UTC的Instant
        TaiInstant taiInstant = taiDateTime.toTaiInstant();
        Instant utcInstant = taiInstant.toInstant();
        
        // 输出UTC时间和UNIX时间戳
        System.out.println("UTC时间: " + utcInstant);
        System.out.println("UNIX时间戳(毫秒): " + utcInstant.toEpochMilli());
    }
}

关键说明

  • 用LocalDateTime解析仅完成格式解析,不会将TAI时间错误识别为UTC时间;
  • ThreeTen-Extra内置完整闰秒数据,TaiDateTime转Instant的过程会自动处理TAI与UTC的闰秒偏移,无需手动计算差值;
  • 需提前引入ThreeTen-Extra库(通过Maven/Gradle添加对应依赖即可)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:22:24