文字列とタイムスタンプ間の変換
1. 概要
Timestampは、Javaの数少ないレガシー日時オブジェクトの1つです。
このチュートリアルでは、String値からTimestampオブジェクトに解析する方法と、TimestampオブジェクトをString.にフォーマットする方法を説明します。
また、TimestampはJava独自の形式に依存しているため、効果的に適応する方法を説明します。
2. StringをTimestampに解析します
2.1. 標準フォーマット
String をTimestampに解析する最も簡単な方法は、そのvalueOf メソッドです。
Timestamp.valueOf("2018-11-12 01:02:03.123456789")
また、StringがJDBCタイムスタンプ形式(yyyy-m[m]-d[d] hh:mm:_ss [.f…] _)の場合、非常に簡単です。
このパターンは次のように解釈できます。
パターン | 説明 | 例 |
---|---|---|
yyyy |
年を表し、4桁の数字が必須です。 |
2018 |
m[m] |
月コンポーネントの場合、1桁または2桁(1から12)が必要です。 |
1、11 |
d[d] |
日の値には、1桁または2桁(1から31)が必要です。 |
7、12 |
hh |
1日の時間を表し、許容値は0から23です。 |
01、16 |
mm |
0から59までの許容値で、1時間の分を表します。 |
02、45 |
ss |
分単位の秒数を表し、許容値は0から59です。 |
03、52 |
[.f…] |
オプションの秒の小数部を表し、最大ナノ秒の精度にすることができるため、許可される値は0〜999999999です。 |
12、1567、123456789 |
2.2. 代替フォーマット
これで、JDBCタイムスタンプ形式でない場合、幸いなことに、valueOf もLocalDateTime インスタンスを取ります。
This means we can take a date in any format,最初にconvert it into a 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());
その際、unlike a Date object, a Timestamp object is capable of storing fractions of a second.に注意してください
3. TimestampをStringとしてフォーマットします
Timestampをフォーマットするには、デフォルトのフォーマットが独自の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変換を使用する方法も確認しました。
そして、これらの例とスニペットover on GitHubをすべて見つけてください。