0

今日は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());

印刷行の結果は次のようになります。「今日はSatJan09 00:00:00CST2010」

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

更新注: 時間、分、秒、ミリ秒をに初期化する必要があるため、今日はで初期化したくありません。これは、ユーザー入力の日付を今日と比較できるようにするために必要です。ユーザーが今日の日付を入力し、フォーマッターを使用してDateオブジェクトを作成する場合、今日をで初期化して2つの日付を比較すると、今日はユーザーのになります。選択した日付(これは正しくありません)。したがって、今日、hr / min / sec/msなしで1日の始めに初期化する必要があります。new Date()0new Date()

4

2 に答える 2

9

紛らわしいことに、カレンダーの月は0(1月)から11(12月)までカウントされるため、カレンダーからMONTHフィールドを抽出するときに、formatter.parse()に「2010-01-09」を渡します。

これについては、関連するSOの質問で説明されています。

于 2010-02-10T00:49:24.563 に答える
3

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();
于 2010-02-10T20:34:43.200 に答える