1. 概述

本文,我们将学习Java中将时间转为UNix-epoch时间戳(微秒)的几种方式

我们将用到:

  • Java 核心中的 java.util.DateCalendar
  • 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 APILocalDateTime 转为时间戳:

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