Java プログラミングの分野では、SimpleDateFormat クラスには次のような特徴があります。特に日付の解析を扱う場合には、しばしば課題が生じます。謎のエラー「java.text.ParseException: Unparseable date」は、開発者を困惑させ、イライラさせる可能性があります。
この謎を解明するために、エラーの原因を詳しく調べてみましょう。 。名前が示すように、SimpleDateFormat は日付を解析するときにロケールが指定されることを期待します。デフォルトでは、システムのロケールが想定されますが、必ずしも希望の形式と一致するとは限りません。この不一致により、恐ろしいエラーが発生する可能性があります。
解決策は、SimpleDateFormat コンストラクターに Locale を明示的に提供することです。適切なロケールを指定すると、目的の文化的慣習に従って日付が確実に解析されます。
この質問は、Android エミュレータでの日付解析と実際のデバイスでの日付解析の矛盾を浮き彫りにしています。この違いは、エミュレータは通常英語ロケールで実行されるのに対し、実際のデバイスはシステム固有のロケールを使用することが多いという事実に起因します。
この問題を修正するには、次のいずれかを設定します。アプリケーション全体でデフォルトのロケールを英語に設定するか、SimpleDateFormat で明示的に Locale.ENGLISH を指定します。 constructor.
SimpleDateFormat はその目的を果たしましたが、Java は次のことに注意することが重要です。 8 では、より現代的で堅牢な日付時刻 API java.time が導入されました。この API は、幅広い日時クラスを提供するだけでなく、SimpleDateFormat のロケール関連の落とし穴も排除します。
たとえば、java.time の DateTimeFormatter クラスは、次のような機能を提供します。日付を解析してフォーマットするための一貫したカスタマイズ可能な方法。 JVM のロケールが自動的にデフォルトになるため、ロケールを明示的に指定する必要がなくなります。
<br>インポートjava.time.LocalDateTime;<br>import java.time.format.DateTimeFormatter;</p> <p>パブリック クラス Main {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">public static void main(String[] args) { String strDateTime = "24 Oct 2016 7:31 pm"; DateTimeFormatter dtf = DateTimeFormatter.<em>ofPattern</em>("d MMM uuuu h:m a"); LocalDateTime ldt = LocalDateTime.<em>parse</em>(strDateTime, dtf); System.out.println(ldt); }
}
出力: p>
2016-10-24T19:31
このデモでは、DateTimeFormatter.ofPattern メソッドは、目的のパターンとデフォルトのロケールを使用して DateTimeFormatter を作成します。 LocalDateTime.parse メソッドは、このフォーマッタを使用して日付時刻文字列を正常に解析します。
Locale を明示的に指定するか、java.time に移行することで、「解析できない」問題を効果的に解決できます。 SimpleDateFormat で「日付」エラーが発生しました。 java.time を採用すると、日時処理機能が強化されるだけでなく、コードを最新の Java のベスト プラクティスに合わせることができます。
以上がJava SimpleDateFormat コードで「解析できない日付」エラーがスローされるのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。