3

最初に文字列として入ってくる日付から 5 日を差し引こうとしています。

この件に関する他の投稿をいくつか見てきましたが、コードから得られる結果は常に正しくありません。2012-01-01 subtract 5 days gives me 'Jan 27 2012'主な問題は、たとえば、このコードを使用して、日を差し引いても年の値が変わらないように見えることです。

cal.add(Calendar.DATE, -5);

助けてください。

4

6 に答える 6

6

1Java では、月が実際には 2月であることをご存知ですか?

Date februaryTheFirst = new Date(2012,1,1); // equals 2012-02-01

これは、あなたが見ているものを説明するかもしれません。代わりに 2012-01-01 をインスタンス化する場合は、次のようにする必要があります。

Date firstDayOf2012 = new Date(2012,0,1); // this is 2012-01-01

を扱うときもまったく同じことが起こりCalendarます:

Calendar.getInstance().set(2012,0,1); // 2012-01-01

Date(int, int, int)およびのドキュメントを確認してくださいCalendar.set(int, int, int)。また、文字列の解析方法を確認することもできます。を使用するSimpleDateFormat.parse(...)と、物事が簡単になります。

奇妙ですね。想像してみてください... おもしろい事実として、IntelliJ のドキュメントでは、この 2 番目のパラメーターである month に で注釈を付けて、@MagicConstant何か非常に奇妙なことが起こっていることをプログラマーに思い出させています。

于 2012-10-17T08:31:50.717 に答える
0

あなたの実装は正しく、正しい値も取得しています。

Calendarの月の始まり0

0 = Jan
1 = Feb

5 daysしたがって、から 減算すると、2012-01-01間違いなくJan 27 2012 何かが返されます。これは、Java Calendar で 1 月が 0 であるのはなぜですか?

于 2012-10-17T08:49:04.550 に答える
0

Calendar.FEBRUARY は、2012 年 2 月 1 日が 2012 年 1 月 27 日の 1 と 5 日前です。

于 2012-10-17T08:33:04.600 に答える
-1

これは私のPCで動作しているコードのセグメントです。まず、カレンダーインスタンスを取得して計算を実行する必要があります。

            Calendar cal = Calendar.getInstance();
     System.out.println("Today : " + cal.getTime());
    // Subtract 300 days from the calendar
    cal.add(Calendar.DATE, -300);
    System.out.println("300 days ago: " + cal.getTime());

これはあなたが得る出力です:

    Today : Wed Oct 17 10:41:23 EET 2012
    300 days ago: Thu Dec 22 10:41:23 EET 2011
于 2012-10-17T08:42:40.317 に答える
-1

使用する:

cal.add(Calendar.DAY_OF_MONTH, -5)

編集:申し訳ありません。DAY_OF_MONTHの同義語DATEです。1使用する代わりにCalendar.JANUARY

于 2012-10-17T08:32:01.117 に答える