1. Java日期与时间戳基础概念解析
在Java开发中,日期和时间的处理是每个开发者都无法回避的基础课题。Date对象代表特定的瞬间,精确到毫秒,而Long型时间戳则是从1970年1月1日00:00:00 GMT(即Unix纪元)开始计算的毫秒数。这种表示方式在计算机系统中具有天然优势:
- 存储效率:一个Long类型仅占8字节,远小于字符串形式的日期
- 计算便利:时间戳可以直接参与数学运算,便于计算时间差
- 时区无关:基于UTC的时间戳消除了时区转换的困扰
- 排序简单:数值比较等同于时间先后比较
注意:虽然Java 8引入了新的时间API(java.time包),但在大量遗留系统和第三方库中,Date类仍然被广泛使用,因此掌握Date与Long的转换依然具有现实意义。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心转换方法与原理解析
2.1 getTime()方法详解
Date.getTime()是Java中最直接的转换方式,其底层实现实际上调用了fastTime字段:
java复制public long getTime() {
return getTimeImpl();
}
private final long getTimeImpl() {
if (cdate != null && !cdate.isNormalized()) {
normalize();
}
return fastTime;
}
这个方法返回的是Date对象内部维护的fastTime值,表示从1970-01-01 00:00:00 GMT到当前Date实例所表示时间的毫秒数。
2.2 转换过程示例
下面是一个更完整的示例,展示了不同场景下的转换:
java复制import java.util.Date;
public class DateToLongDemo {
public static void main(String[] args) {
// 场景1:获取当前时间戳
Date now = new Date();
System.out.println("当前时间戳:" + now.getTime());
// 场景2:转换指定日期
Date specificDate = new Date(122, 4, 15); // 2022-05-15
System.out.println("指定日期时间戳:" + specificDate.getTime());
// 场景3:时间戳还原为Date
long timestamp = 1652601600000L;
Date restoredDate = new Date(timestamp);
System.out.println("还原后的日期:" + restoredDate);
}
}
