2011-01-12 13 views
1

私のプログラムで新しい日付を設定するのにミリ秒を使いたいのですが、うまくいきません。誰かがそれがなぜ動かないのか教えていただけますか?GregorianCalendarについて:同じ入力ですが、Javaでの出力が異なります

カレンダーr_1 =新しい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日に変更すると、それはdoenst仕事。

出力が正しい----------、それは2011年1月26日である----------

カレンダーR_1 =新しいてGregorianCalendar(2011,0、 1)。

r_1.add(Calendar.DAY_OF_MONTH、25);

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

-----------出力は、それが2010年12月7日で、今間違っている------

長いDATE_1 = r_1.getTimeInMillis()+ 25 * 24 * 60 * 60 * 1000; //変更は2から25までです。

r_1.setTimeInMillis(startTime1);

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

おかげ

答えて

3

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

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

、あなたは

25L*24*60*60*1000 
+0

おかげで、その真の.Thereはオーバーフローです! – echo

0

25*24*60*60*1000intに収まるには大きすぎる、次のように、長くする表現を強制する必要があります。 25L*24*60*60*1000は長い定数です。

+0

あなたは右です!ありがとう! – echo

0

はそのような何か試してみてください:

final long k = 25*24*60*60*1000L; 
long date_1 = r_1.getTimeInMillis() + k; 
+0

ありがとうlot.iこの方法で試して、それは動作します! – echo

+0

これを答えとしてマークしてください! –

関連する問題