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

如何在Java中将指定Date值转换为Epoch时间/纳秒?

解决Date转Epoch纳秒的问题

首先,你之前的代码有个明显的小错误:Date ts = data.get("timestamp").getTime() 这行里,getTime() 返回的是long类型的毫秒数,不是Date对象,所以这行肯定编译不过去。咱们一步步来解决:

方法步骤

  • 获取正确的Date对象:先确保data.get("timestamp")确实返回java.util.Date类型,不确定的话可以加类型转换:
    Date date = (Date) data.get("timestamp");
    
  • 转换为Instant:Java 8+推荐用Instant处理时间戳,它原生支持纳秒精度,把Date转成Instant很简单:
    Instant instant = date.toInstant();
    
  • 计算Epoch纳秒:Epoch纳秒是从1970-01-01T00:00:00Z到指定时间的总纳秒数,通过Instant的两个方法组合计算即可:
    long epochNanos = instant.getEpochSecond() * 1_000_000_000L + instant.getNano();
    
    这里要注意加L后缀避免整数溢出——秒数乘以1e9很容易超出int的范围。

完整示例代码

// 假设data是存储timestamp的Map或类似数据结构
Date date = (Date) data.get("timestamp");
Instant instant = date.toInstant();
long epochNanos = instant.getEpochSecond() * 1_000_000_000L + instant.getNano();

// 针对你的日期Tue Mar 27 17:57:35 PDT 2018,输出的纳秒值应为1522193855000000000
System.out.println(epochNanos);

重要提醒

java.util.Date本身只有毫秒精度,所以转成Instant后,纳秒部分会是0(因为Date根本没存储纳秒信息)。如果需要真正的纳秒级时间戳,得确保原始数据来源支持纳秒,比如用java.time.LocalDateTime或者从数据库直接读取纳秒级字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:03:07