文字列とタイムスタンプの間で変換する
1. 概要
Timestamp は、Javaの数少ないレガシー日時オブジェクトの1つです。
このチュートリアルでは、String値からTimestampオブジェクトに解析する方法と、TimestampオブジェクトをStringにフォーマットする方法を説明します。 。
また、タイムスタンプはJava独自の形式に依存しているため、効果的に適応する方法を説明します。
2. StringをTimestampに解析します
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タイムスタンプ形式でない場合、幸いなことに、valueOfもLocalDateTimeインスタンスを取ります。
これは、任意の形式で日付を取得できることを意味します。最初にそれを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でこれらの例とスニペットをすべて見つけてください。