Convert Time to Milliseconds in Java – 在Java中把时间转换为毫秒

最后修改: 2019年 5月 2日

中文/混合/英文(键盘快捷键:t)

1. Overview

1.概述

In this quick tutorial, we’ll illustrate multiple ways of converting time into Unix-epoch milliseconds in Java.

在这个快速教程中,我们将说明在Java中把时间转换为Unix-epoch毫秒的多种方法

More specifically, we’ll use:

更具体地说,我们将使用。

  • Core Java’s java.util.Date and Calendar
  • Java 8’s Date and Time API
  • Joda-Time library

2. Core Java

2.Core Java

2.1. Using Date

2.1.使用Date

Firstly, let’s define a millis property holding a random value of milliseconds:

首先,让我们定义一个millis属性,持有一个毫秒的随机值。

long millis = 1556175797428L; // April 25, 2019 7:03:17.428 UTC

We’ll use this value to initialize our various objects and verify our results.

我们将使用这个值来初始化我们的各种对象并验证我们的结果。

Next, let’s start with a Date object:

接下来,让我们从一个Date对象开始。

Date date = // implementation details

Now, we’re ready to convert the date into milliseconds by simply invoking the getTime() method:

现在,我们准备通过简单地调用getTime()方法将date转换为毫秒。

Assert.assertEquals(millis, date.getTime());

2.2. Using Calendar

2.2.使用Calendar

Likewise, if we have a Calendar object, we can use the getTimeInMillis() method:

同样地,如果我们有一个Calendar对象,我们可以使用getTimeInMillis()方法。

Calendar calendar = // implementation details
Assert.assertEquals(millis, calendar.getTimeInMillis());

3. Java 8 Date Time API

3.Java 8 Date Time API

3.1. Using Instant

3.1.使用Instant

Simply put, Instant is a point in Java’s epoch timeline.

简单地说,Instant是Java的纪元时间线中的一个点。

We can get the current time in milliseconds from the Instant:

我们可以从Instant中获得以毫秒为单位的当前时间。

java.time.Instant instant = // implementation details
Assert.assertEquals(millis, instant.toEpochMilli());

As a result, the toEpochMilli() method returns the same number of milliseconds as we defined earlier.

因此,toEpochMilli()方法返回与我们之前定义的相同的毫秒数。

3.2. Using LocalDateTime

3.2.使用LocalDateTime

Similarly, we can use Java 8’s Date and Time API to convert a LocalDateTime into milliseconds:

同样,我们可以使用Java 8的日期和时间API来将LocalDateTime转换成毫秒。

LocalDateTime localDateTime = // implementation details
ZonedDateTime zdt = ZonedDateTime.of(localDateTime, ZoneId.systemDefault());
Assert.assertEquals(millis, zdt.toInstant().toEpochMilli());

First, we created an instance of the current date. After that, we used the toEpochMilli() method to convert the ZonedDateTime into milliseconds.

首先,我们创建了一个当前日期的实例。之后,我们使用toEpochMilli()方法将ZonedDateTime转化为毫秒。

As we know, LocalDateTime doesn’t contain information about the time zone. In other words, we can’t get milliseconds directly from LocalDateTime instance.

正如我们所知,LocalDateTime不包含时区信息。换句话说,我们不能直接从LocalDateTime实例中获得毫秒数

4. Joda-Time

4.Joda-Time

While Java 8 adds much of Joda-Time’s functionality, we may want to use this option if we are on Java 7 or earlier.

虽然Java 8增加了许多Joda-Time的功能,但如果我们是在Java 7或更早的版本上,我们可能想使用这个选项。

4.1. Using Instant

4.1.使用Instant

Firstly, we can obtain the current system milliseconds from the Joda-Time Instant class instance using the getMillis() method:

首先,我们可以使用getMillis()方法从Joda-Time Instant类实例中获得当前的系统毫秒。

Instant jodaInstant = // implementation details
Assert.assertEquals(millis, jodaInstant.getMillis());

4.2. Using DateTime

4.2.使用DateTime

Additionally, if we have a Joda-Time DateTime instance:

此外,如果我们有一个Joda-Time的DateTime实例。

DateTime jodaDateTime = // implementation details

Then we can retrieve the milliseconds with the getMillis() method:

然后我们可以用getMillis()方法检索毫秒。

Assert.assertEquals(millis, jodaDateTime.getMillis());

5. Conclusion

5.结论

In conclusion, this article demonstrates how to convert time into milliseconds in Java.

总之,本文演示了如何在Java中把时间转换成毫秒。

Finally, as always, the complete code for this article is available over on GitHub.

最后,像往常一样,本文的完整代码可在GitHub上获得