質問

今日は 2010 年 2 月 9 日火曜日ですが、日付を印刷すると間違った日付が表示されます。

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

Date today = formatter.parse(String.format("%04d-%02d-%02d",
        Calendar.getInstance().get(Calendar.YEAR),
        Calendar.getInstance().get(Calendar.MONTH),
        Calendar.getInstance().get(Calendar.DAY_OF_MONTH)));

System.out.println("Today is " + today.toString());

print 行の結果は次のようになります。「今日は 2010 年 1 月 9 日土曜日 00:00:00 CST」

間違いなく、それは 1 月 9 日土曜日ではなく、2 月 9 日火曜日です。私が何か間違ったことをしていると思うので、誰かがここで何が間違っているのか教えてもらえますか?曜日を手動で設定する必要がありますか?

アップデート 注記:今日は初期化したくないです new Date() 時、分、秒、ミリ秒を次のように初期化したいからです。 0. 。これは、ユーザーが入力した日付を今日と比較するために必要です。ユーザーが今日の日付を入力し、フォーマッタを使用して Date オブジェクトを構築した場合、今日を次のように初期化すると、 new Date() そして 2 つの日付を比較します - 今日は ユーザーが選択した日付 (これは正しくありません)。したがって、今日は 1 日の初めに、時/分/秒/ミリ秒を使用せずに初期化する必要があります。

役に立ちましたか?

解決

あなたはカレンダーからMONTHフィールドを抽出する場合)(formatter.parseする「2010-01-09」を渡しているので紛らわしい、カレンダーの数ヶ月は、11(12月)まで(1月)0から数えます。

関連 SO質問。

他のヒント

あなたが使用することができJodaTime使用しない場合:

Calendar calendar = Calendar.getInstance();

calendar.set( Calendar.HOUR_OF_DAY, 0 );
calendar.set( Calendar.MINUTE, 0 );
calendar.set( Calendar.SECOND, 0 );
calendar.set( Calendar.MILLISECOND, 0 );

Date today = calendar.getTime();

これは、はるかに効率的で、あなたの文字列フォーマット/解析アプローチよりもエラーが発生しやすい小さいます。

あなたがJodaTimeを使用できる場合は、

これは非常に好ましい方法である。

LocalDate date = new DateTime().toLocaleDate();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top