4

Android でカレンダーを操作しようとしていますが、日付をミリ秒に変換しようとすると、実行ごとに異なる結果が得られます。

milliseconds1 と milliseconds2 の値を出力すると、時間によって異なる結果が得られます。

私のコードは次のとおりです。

Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = new GregorianCalendar(TimeZone.getTimeZone("GMT"));

calendar1.set(1997, 9, 3);
calendar2.set(1997, 9, 01);

long milliseconds1 = calendar1.getTimeInMillis();
long milliseconds2 = calendar2.getTimeInMillis();

これは Java (または Android の実装) のバグですか、それともそのようなものですか?

4

1 に答える 1

9

あなたの質問に対する答えは次のとおりです。いいえ、これは Java や Android のバグではありません。これは十分に文書化された動作です。Calendarインスタンスには、YEAR、MONTH、および DATE よりも多くのフィールドがあります。新しいカレンダー インスタンスを生成し、それらのフィールドのみを変更して、他のすべてのフィールドを作成時の方法のままにします。プログラムを 2 回続けて実行すると、その間に秒とミリ秒が変更されます。

JavaDocから:

カレンダー フィールド YEAR、MONTH、および DAY_OF_MONTH の値を設定します。 他のカレンダー フィールドの以前の値は保持されます。これが望ましくない場合は、最初にclear()を呼び出します。

毎回同じ値を出力するには、次のようにする必要があります。

    Calendar calendar1 = Calendar.getInstance();
    Calendar calendar2 = new GregorianCalendar(TimeZone.getTimeZone("GMT"));

    calendar1.clear();
    calendar1.set(1997, 9, 3);
    calendar2.clear();
    calendar2.set(1997, 9, 1);

    long milliseconds1 = calendar1.getTimeInMillis();
    long milliseconds2 = calendar2.getTimeInMillis();
于 2013-01-02T08:25:15.177 に答える