1

プログラムでミリ秒を使用して新しい日付を設定したいのですが、うまくいきません。なぜそれがうまくいかないのか教えてくれる人はいますか?

カレンダー r_1 = new GregorianCalendar(2011,0,1);

r_1.add(Calendar.DAY_OF_MONTH,2);

System.out.println(r_1.getTime());

long date_1 = r_1.getTimeInMillis() + 2*24*60*60*1000;

r_1.setTimeInMillis(startTime1);

System.out.println(r_1.getTime());

どちらも非常に正しく機能しますが、日を2から25に変更すると機能しません。

----------出力は正しく、2011/01/26 です ----------

カレンダー r_1 = new GregorianCalendar(2011,0,1);

r_1.add(Calendar.DAY_OF_MONTH,25);

System.out.println(r_1.getTime());

-----------現在、出力は正しくありません。2010/12/07 です------

long date_1 = r_1.getTimeInMillis() + 25*24*60*60*1000;//2 を 25 に変更しました

r_1.setTimeInMillis(startTime1);

System.out.println(r_1.getTime());

ありがとう

4

3 に答える 3

3

25*24*60*60*1000は整数であり、整数のサイズをオーバーフローして負の数を作成しました。

あなたの式は 2,160,000,000 ミリ秒です。int が保持できる最大値は 2,147,483,647 です。

これを修正するには、次のように式を強制的に長くする必要があります。

25L*24*60*60*1000
于 2011-01-12T23:19:40.710 に答える
0

そのようなことを試してください:

final long k = 25*24*60*60*1000L;
long date_1 = r_1.getTimeInMillis() + k;
于 2011-01-12T23:23:36.050 に答える
0

25*24*60*60*1000は大きすぎて に収まりませんint25L*24*60*60*1000どちらが長い定数か試してください。

于 2011-01-12T23:20:50.447 に答える