1. 概要

Timestamp は、Javaの数少ないレガシー日時オブジェクトの1つです。

このチュートリアルでは、String値からTimestampオブジェクトに解析する方法と、TimestampオブジェクトをStringにフォーマットする方法を説明します。 。

また、タイムスタンプはJava独自の形式に依存しているため、効果的に適応する方法を説明します。

2. StringTimestampに解析します

2.1. 標準フォーマット

文字列タイムスタンプに解析する最も簡単な方法は、そのvalueOfメソッドです。

Timestamp.valueOf("2018-11-12 01:02:03.123456789")

また、 String がJDBCタイムスタンプ形式の場合– yyyy-m [m] -d [d] hh:mm ss [。f …]–それならとても簡単です。

そのパターンは次のように解釈できます。

パターン 説明
yyyy 年を表し、4桁の数字が必須です。 2018
んん] 月のコンポーネントには、1桁または2桁(1から12)が必要です。 1, 11
d [d] 日の値には、1桁または2桁(1から31)が必要です。 7, 12
hh 1日の時間を表し、許容値は0〜23です。 01, 16
んん 0から59までの許容値で、1時間の分を表します。 02, 45
ss 許容値は0〜59で、1分間の秒数を表します。 03, 52
[.f…] オプションの1秒の小数部を表し、最大ナノ秒の精度にすることができるため、許可される値は0〜999999999です。 12, 1567, 123456789

2.2. 代替フォーマット

これで、JDBCタイムスタンプ形式でない場合、幸いなことに、valueOfLocalDateTimeインスタンスを取ります。

これは、任意の形式で日付を取得できることを意味します。最初にそれをLocalDateTimeに変換する必要があります。

String pattern = "MMM dd, yyyy HH:mm:ss.SSSSSSSS";
String timestampAsString = "Nov 12, 2018 13:02:56.12345678";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
LocalDateTime localDateTime = LocalDateTime.from(formatter.parse(timestampAsString));

次に、前に行ったvalueOfを使用できます。

Timestamp timestamp = Timestamp.valueOf(localDateTime);
assertEquals("2018-11-12 13:02:56.12345678", timestamp.toString());

Dateオブジェクトとは異なり、Timestampオブジェクトは1秒の端数を格納できることに注意してください。

3. タイムスタンプ文字列としてフォーマットします

タイムスタンプをフォーマットするには、デフォルトのフォーマットが独自のJDBCタイムスタンプフォーマットであるため、同じ課題があります。

assertEquals("2018-11-12 13:02:56.12345678", timestamp.toString());

ただし、ここでも、中間変換を使用して、結果のStringをISO-8601標準のような別の日時パターンにフォーマットできます。

Timestamp timestamp = Timestamp.valueOf("2018-12-12 01:02:03.123456789");
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
 
String timestampAsString = formatter.format(timestamp.toLocalDateTime());
assertEquals("2018-12-12T01:02:03.123456789", timestampAsString);

4. 結論

この記事では、JavaでStringオブジェクトとTimestampオブジェクトを変換する方法を説明しました。 また、 LocalDateTime 変換を中間ステップとして使用して、さまざまな日付と時刻のパターンとの間で変換する方法についても説明しました。

そして、GitHubでこれらの例とスニペットをすべて見つけてください。