ホームページ >Java >&#&チュートリアル >Java SimpleDateFormat が西暦の日付を 1 月 (yyyy/MM/DD と yyyy/MM/dd) に変換するのはなぜですか?
Java SimpleDateFormat の難題: すべての月がデフォルトで 1 月になる
Java の SimpleDateFormat を使用して Active Directory から日付を解析すると、不可解な問題が発生します。日付が誤って 1 月に変換されます。この矛盾に興味をそそられたので、問題を例示するコード スニペットを詳しく調べてみましょう。
<code class="java">private Date getParsedDate(String givenString) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/DD"); try { return sdf.parse(formattedString); } catch (ParseException ex) { ex.printStackTrace(); } return null; }</code>
このコードを AD 日付値 "20050912190509.0Z" で実行すると、予期しない出力が得られます。
Value from AD is: 20050912190509.0Z Formatted String is: 2005/09/12 Final date string is: Wed Jan 12 00:00:00 EST 2005
日と年は正確に識別されますが、月は常に 1 月と間違われます。この明白なエラーを引き起こす、一見単純なコードの中にどのような秘密があるのでしょうか?
その答えは、SimpleDateFormat パターン文字列の微妙な見落としにあります。 「yyyy/MM/DD」を指定すると、誤って月の形式が大文字の「MM」になってしまいます。ただし、Active Directory の日付値では、月には小文字の「mm」が使用されます。
この問題を修正するには、パターン文字列を「yyyy/MM/dd」に調整し、日には小文字の「dd」を使用します。
<code class="java">SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");</code>
この小さな変更を加えることで、SimpleDateFormat は Active Directory からの日付を正しく解釈し、正しい月を含む最終日付文字列をレンダリングします。
Value from AD is: 20050912190509.0Z Formatted String is: 2005/09/12 Final date string is: Wed Sep 12 00:00:00 EST 2005
この修正により、Java の SimpleDateFormat が正確に解析されるようになります。 Active Directory から日付を取得できるため、自信を持って履歴データを操作したり、特定の日付範囲に基づいてレポートを作成したりできます。
以上がJava SimpleDateFormat が西暦の日付を 1 月 (yyyy/MM/DD と yyyy/MM/dd) に変換するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。