0

私は以下のコードを使用していますが、そうであってはならない -ve 値を取得しています!..

Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(2013, 10, 31, 23, 00);

ctim=calendar.getTimeInMillis();//system time at shut down


calendar.clear();
calendar.set(2013, 11, 1, 1, 00);
long cTime = calendar.getTimeInMillis();//system time at restart
timediff = cTime-ctim;

何が悪いのかわからない..??!!

4

1 に答える 1

3

これが問題です。Java の月は、1 ~ 12 ではなく、0 ~ 11 で表されます。言うためのJavadocCalendar.MONTH

月を示す get および set のフィールド番号。これはカレンダー固有の値です。グレゴリオ暦とユリウス暦の年の最初の月は 1 月で、これは 0 です。最後は、1 年の月数によって異なります。

したがって、Calendar11 月は 30 日あるため、最初の日付は 11 月 31 日または 12 月 1 日 (デフォルトでは s は「寛大」) として解釈されます。2 番目の日付も 12 月 1 日と解釈されます。

したがって、SimpleDateFormatofで出力される 2 つの時間は次の"yyyy-MM-dd HH:mm:ss"とおりです。

2013-12-01 23:00:00
2013-12-01 01:00:00

-79200000これは、取得しているミリ秒に対応するマイナス 22 時間の差です。

入力している月から減算1します。

calendar.set(2013, 9, 31, 23, 00);  // 9 here is October

calendar.set(2013, 10, 1, 1, 00);   // 10 here is November

プラスの差が得られます

于 2013-10-10T15:47:33.547 に答える