文字列の日付形式をJava.time.Instantに変換したい
日付の解析中に例外が発生します。
Java.lang.IllegalArgumentException: Too many pattern letters: s
最初に文字列から日付に変換するために、以下のコードを使用しています。
String string = "2018-07-17T09:59:51.312Z";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYY-MM-DD'T'hh:mm:ss.sssZ", Locale.FRANCE);
LocalDate date = LocalDate.parse(string, formatter);
System.out.println(date);
「タイムスタンプ」を変換したい:"2018-07-17T09:59:51.312Z"
ISO8601形式の形式時間でYYYY-MM-DDThh:mm:ss.sssZ
UTCタイムゾーン。
チェック済み Java文字列から日付への変換 ですが、機能していません。
文字列の日付形式をJava.time.Instantに変換します
書式設定パターンをスキップします。解析するだけです。
Instant.parse( "2018-07-17T09:59:51.312Z" )
はい、 最初の回答 に示されているように誤ったフォーマットパターンを使用しました。
ただし、フォーマットパターンを指定する必要はまったくありません。入力文字列は標準の ISO 8601 形式です。Java.timeクラスは、文字列の解析/生成時にデフォルトでISO8601形式を使用します。
最後のZ
は [〜#〜] utc [〜#〜] を意味し、「Zulu」と発音されます。
Instant instant = Instant.parse( "2018-07-17T09:59:51.312Z" ) ;
Java.time フレームワークはJava 8以降に組み込まれています。これらのクラスは厄介な古い legacyJava.util.Date
、 Calendar
、& SimpleDateFormat
などの日時クラス。
Joda-Time プロジェクトは現在 メンテナンスモード であり、 Java.time クラスへの移行をアドバイスします。
詳細については、 Oracle Tutorial を参照してください。多くの例と説明については、Stack Overflowを検索してください。仕様は JSR 310 です。
Java.timeオブジェクトをデータベースと直接交換できます。 JDBCドライバーJDBC 4.2 以降に準拠)を使用します。文字列やJava.sql.*
クラスは必要ありません。
Java.timeクラスはどこで入手できますか?
ThreeTen-Extra プロジェクトは、Java.timeを追加のクラスで拡張します。このプロジェクトは、Java.timeに将来追加される可能性のある試験場です。ここには、 Interval
、 YearWeek
、 YearQuarter
、 more )などの便利なクラスがあります。
独自のフォーマットパターン文字列を書くのに苦労しないでください。文字列は、Java.timeに組み込まれているISO8601形式です。 Java.time.Instant
に解析するには(タイトルにあるように):
String string = "2018-07-17T09:59:51.312Z";
Instant inst = Instant.parse(string);
System.out.println(inst);
出力:
2018-07-17T09:59:51.312Z
LocalDate
に解析するには(コードスニペットが意図しているように見えます):
LocalDate date = LocalDate.parse(string, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
System.out.println(date);
2018-07-17
フォーマットパターンの文字では大文字と小文字が区別されます(リンク先の質問に対する最初の回答の表からも確認できます)。
YYYY
を使用しました。大文字のY
は週の年を表し、週番号でのみ役立ちます。年にはuuuu
または小文字のyyyy
を使用します。DD
は年の日を表します。曜日には小文字のdd
が必要です。hh
は、AMまたはPM 01から12までで、AM/PMマーカーでのみ役立ちます。時間帯には大文字のHH
が必要です。 00から23まで。最後に、小文字のss
を秒単位で正しく使用しましたが、sss
を秒単位で使用しました。後者の場合、大文字のSSS
が必要です。このエラーがエラーメッセージの理由です。秒は60秒(うるう秒を含む)までしか上がらないため、s
のように3つのsss
は意味がなく、DateTimeFormatter
これに反対します。ドキュメントから:
'd'、 'H'、 'h'、 'K'、 'k'、 'm'、および 's'の2文字まで指定できます。