1. 概述
本文,我们将学习Java中将时间转为UNix-epoch时间戳(微秒)的几种方式。
我们将用到:
- Java 核心中的 java.util.Date 和 Calendar
- Java 8 中的 Date 和 Time API
- Joda-Time library
2. Java 核心
2.1. 使用 Date 获取时间戳
首先为了方便测试,我们定义一个 millis 变量,生成一个随机的时间戳。
long millis = 1556175797428L; // April 25, 2019 7:03:17.428 UTC
然后,定义一个 Date 对象:
Date date = // 忽略实现细节
万事俱备,我们可以调用getTime()方法将date转为时间戳:
Assert.assertEquals(millis, date.getTime());
2.2. 使用 Calendar
类似的,如果是 Calendar 对象,我们可以使用 getTimeInMillis() 方法:
Calendar calendar = // implementation details
Assert.assertEquals(millis, calendar.getTimeInMillis());
3. Java 8 Date Time API
3.1. 使用 Instant
Java 8 中 新增了Instant 和 LocalDateTime 类。
Instant 表示Java时间轴上的一个点。
我们可通过Instant获取当前时间戳:
java.time.Instant instant = // 实现细节
Assert.assertEquals(millis, instant.toEpochMilli());
3.2. 使用 LocalDateTime
同样, 可使用 Java 8 的 Date 和 Time API 将 LocalDateTime 转为时间戳:
LocalDateTime localDateTime = // implementation details
ZonedDateTime zdt = ZonedDateTime.of(localDateTime, ZoneId.systemDefault());
Assert.assertEquals(millis, zdt.toInstant().toEpochMilli());
上面我们先将其转为ZonedDateTime,因为 LocalDateTime 不含时区信息,不能直接获取获取时间戳。
4. Joda-Time
虽然 Java 8 添加了许多 Joda-Time 的功能,但如果我们使用的是 Java 7 或更早版本,我们可能需要考虑该方法。
4.1. 使用 Instant
首先, 我们可以使用 Joda-Time中Instant类的 getMillis() 方法获取时间戳:
Instant jodaInstant = // implementation details
Assert.assertEquals(millis, jodaInstant.getMillis());
4.2. 使用 DateTime
使用 Joda-Time 的DateTime:
DateTime jodaDateTime = // implementation details
调用 getMillis() 获取时间戳:
Assert.assertEquals(millis, jodaDateTime.getMillis());
5. 总结
本文演示了如何在 Java 中将时间转换为以毫秒计算的时间戳。
本文完整的示例源码存放在GitHub。