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