Java中如何将TAI时间字符串转换为UTC或UNIX时间?
解决Java中TAI时间字符串转UTC/UNIX时间的方案
核心思路
输入的YYYY-MM-ddTHH:mm:ss.S格式字符串是TAI时间的日期时间表示,借助ThreeTen-Extra库可按以下步骤处理:
- 先按格式解析为
LocalDateTime(仅处理格式,不关联时间尺度); - 将
LocalDateTime转换为TAI时间尺度下的TaiDateTime; - 从
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
相关产品推荐
相关产品推荐

