1. 概要

このクイックチュートリアルでは、Javaで時間をUnixエポックミリ秒に変換する複数の方法を説明します。

具体的には、以下を使用します。

  • コアJavaのjava.util.Dateおよびカレンダー
  • Java8の日付と時刻のAPI
  • Joda-Timeライブラリ

2. コアJava

2.1. 日付を使用する

まず、ミリ秒のランダムな値を保持するmillisプロパティを定義しましょう。

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

この値を使用して、さまざまなオブジェクトを初期化し、結果を検証します。

次に、Dateオブジェクトから始めましょう。

Date date = // implementation details

これで、getTime()メソッドを呼び出すだけで、日付をミリ秒に変換する準備が整いました。

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

2.2. カレンダーを使用する

同様に、 Calendar オブジェクトがある場合は、 getTimeInMillis()メソッドを使用できます。

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

3. Java8日時API

3.1. インスタントを使用する

簡単に言えば、InstantはJavaのエポックタイムラインのポイントです。

Instant から現在の時刻をミリ秒単位で取得できます:

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

その結果、 toEpochMilli()メソッドは、前に定義したのと同じミリ秒数を返します。

3.2. LocalDateTimeを使用する

同様に、Java8のDate and Time API を使用して、LocalDateTimeをミリ秒に変換できます。

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

まず、現在の日付のインスタンスを作成しました。 その後、 toEpochMilli()メソッドを使用して、ZonedDateTimeをミリ秒に変換しました。

ご存知のとおり、LocalDateTimeにはタイムゾーンに関する情報は含まれていません。 つまり、LocalDateTimeインスタンスから直接ミリ秒を取得することはできません。

4. ジョーダタイム

Java 8はJoda-Timeの機能の多くを追加しますが、Java 7以前を使用している場合は、このオプションを使用することをお勧めします。

4.1. インスタントを使用する

まず、 getMillis()メソッドを使用して、 Joda-Time Instantクラスインスタンスから現在のシステムミリ秒を取得できます。

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から入手できます。