ホームページ > Java > &#&チュートリアル > SimpleDateFormat が「YYYY-MM-dd HH:mm」を解析するときに間違った日付と時刻を生成するのはなぜですか?

SimpleDateFormat が「YYYY-MM-dd HH:mm」を解析するときに間違った日付と時刻を生成するのはなぜですか?

Linda Hamilton
リリース: 2024-11-03 19:15:03
オリジナル
1090 人が閲覧しました

Why does SimpleDateFormat produce the wrong date and time when parsing

SimpleDateFormat "YYYY-MM-dd HH:mm" を解析すると間違った日付と時刻が生成される

文字列表現を変換しようとしたときSimpleDateFormat を使用して Date オブジェクトに「YYYY-MM-dd HH:mm」形式の日付と時刻を入力すると、間違った結果が得られる場合があります。以下に示すように、コードは予期しない出力を生成します。

<code class="java">Date newDate = null;
String dateTime = "2013-03-18 08:30";
SimpleDateFormat df = new SimpleDateFormat("YYYY-MM-dd HH:mm", Locale.ENGLISH);
df.setLenient(false);
try {
    newDate = df.parse(dateTime);
} catch (ParseException e) {
    throw new InvalidInputException("Invalid date input.");
}</code>
ログイン後にコピー

期待される出力は「Thu Mar 18 08:30:00 EST 2013」であるはずですが、コードは誤って「Sun Dec 30 08:30」を生成します。 :00 EST 2012".

問題の原因は、SimpleDateFormat コンストラクター内の YYYY パターンの入力ミスにあります。指定された日付と時刻の形式の正しいパターンは yyyy で、年を表す小文字の y が使用されます。

この問題を解決するには、SimpleDateFormat パターンを次のように変更します。

<code class="java">SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.ENGLISH);</code>
ログイン後にコピー

パターンを更新します。とすると、SimpleDateFormat オブジェクトは日付と時刻の文字列を正しく解析し、「Thu Mar 18 08:30:00 EST 2013」という目的の出力が得られます。

ここでは Lenient がオフになっていることに注意することが重要です。コードをオフにすることは通常は推奨されません。ほとんどの場合、間違ったデータを解析する可能性があるよりも、解析エラーを適切に処理する方が適切です。

以上がSimpleDateFormat が「YYYY-MM-dd HH:mm」を解析するときに間違った日付と時刻を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート