「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Java で日付文字列を解析すると「不正なパターン文字 'T'」がスローされるのはなぜですか?

Java で日付文字列を解析すると「不正なパターン文字 'T'」がスローされるのはなぜですか?

2024 年 12 月 23 日に公開
ブラウズ:508

Why Does Parsing a Date String in Java Throw

日付文字列を java.util.Date に解析するときに不正なパターン文字 'T' が発生しました

日付文字列を java.util.Date に解析します。日付オブジェクトには、特定のルールに準拠したパターンが必要です。一般的なパターンの 1 つは、ISO 8601 形式で日付を表す「yyyy-MM-ddThh:mm:ssZ」です。

問題:
指定されたパターンを使用する場合、例外が発生します。 「java.lang.IllegalArgumentException: 不正なパターン文字」というメッセージとともにスローされる'T'."

Reason:
パターン内の 'T' は、日付コンポーネントと時刻コンポーネントの間の区切り文字を表します。ただし、Java の SimpleDateFormat では、「T」文字を正しく認識するには、両側を一重引用符でエスケープする必要があります。

解決策 1: パターンで 'T' をエスケープする
元のパターンを使用して問題を解決するには、次のように「T」文字をエスケープします:

String pattern = "yyyy-MM-dd'T'hh:mm:ssZ";

解決策 2: ISO_8601_24H_FULL_FORMAT を使用する
代わりに、 Q2597083 class:

String pattern = Q2597083.ISO_8601_24H_FULL_FORMAT;

Java 8 以降の場合:
Java 8 以降の場合は、DateTimeFormatter クラスを使用することをお勧めします。 SimpleDateFormat の代わりに、Date の代わりに Instant を使用します。次に例を示します。

import java.time.Instant;
import java.time.format.DateTimeFormatter;

String dateString = "2010-10-02T12:23:23Z";
DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME;
Instant d = Instant.parse(dateString);
System.out.println(d.getYear());

これらのソリューションを使用すると、「不正なパターン文字 'T'」例外が発生することなく、ISO 8601 形式の日付文字列を正常に解析できます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3