2011-01-12 55 views
1

我想在程序中使用毫秒来设置新的日期,但它不起作用。有没有人可以告诉我为什么它不起作用?关于GregorianCalendar:在java中输入相同但输出不同

Calendar 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 =新的GregorianCalendar(2011,0, 1);

r_1.add(Calendar.DAY_OF_MONTH,25);

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

-----------输出现在不正确,它是2010/12/07 ------

长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

谢谢,它的真实。有一个溢出! – echo 2011-01-13 02:03:00

0

25*24*60*60*1000太大而不适合用int。 尝试25L*24*60*60*1000这是一个很长的常数。

+0

你对!谢谢! – echo 2011-01-13 02:07:08

0

尝试类似的东西:

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

非常感谢。我以这种方式尝试过它,它的工作原理! – echo 2011-01-13 02:06:39

相关问题