1.概要


java.time.Instant

クラスと

java.sql.Timestamp

クラスはどちらも、UTCのタイムライン上のポイントを表します。つまり、https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html[Javaエポック]以降のナノ秒数を表します。

このクイックチュートリアルでは、組み込みのJavaメソッドを使用して、互いに変換します。

2.

Instant



Timestamp

に変換して戻る


  • __Instant


    sをタイムスタンプに変換するために

    Timestamp.from()__を使うことができます。

Instant instant = Instant.now();
Timestamp timestamp = Timestamp.from(instant);
assertEquals(instant.toEpochMilli(), timestamp.getTime());

逆も同様ですが、

Timestamp.toInstant()

を使用して

__Timestamp


sを


Instant

__sに変換できます。

instant = timestamp.toInstant();
assertEquals(instant.toEpochMilli(), timestamp.getTime());

どちらの方法でも、

Instant



Timestamp

の両方がタイムライン上の同じポイントを表します。

次に、2つのクラスとタイムゾーンの間の相互作用を見てみましょう。

3.

toString()

メソッドの違い


  • Instant



    Timestamp



    toString()

    を呼び出すと、タイムゾーンとは動作が異なります。**

    Instant.toString()

    は、UTCタイムゾーンで時刻を返します。一方、

    Timezone.toString()

    は、ローカルマシンのタイムゾーンの時刻を返します。

それぞれ

instant



timezone



toString()

を呼び出したときに得られる結果を見てみましょう。

Instant (in UTC): 2018-10-18T00:00:57.907Z
Timestamp (in GMT +05:30): 2018-10-18 05:30:57.907


Here、timestamp.toString()

は、__instant.toString()によって返された時間から5時間30分経過した時間をもたらしました。


  • toString()

    メソッドの出力は異なりますが、

    timestamp



    instant

    の両方がタイムライン上の同じポイントを表します** 。

これを検証するには、

Timestamp

をUTCタイムゾーンに変換します。

DateFormat df = DateFormat.getDateTimeInstance();
df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:SS'Z'");
df.setTimeZone(TimeZone.getTimeZone("UTC"));

assertEquals(instant.toString(), df.format(timestamp).toString());

4.まとめ

このクイックチュートリアルでは、組み込みメソッドを使用して、Javaで

java.time.Instant

クラスと

java.sql.Timestamp

クラスの間で変換する方法を見ました。

また、タイムゾーンが出力の変化にどのように影響するかを調べました。

そして、いつものように、完全なコード例はhttps://github.com/eugenp/tutorials/tree/master/java-dates[GitHubで利用可能]です。