关于GregorianCalendar:java中输入相同但输出不同

时间:2011-01-12 23:16:40

标签: java gregorian-calendar

我想用毫秒来在我的程序中设置一个新日期,但它不起作用。有没有人可以告诉我它为什么不起作用?

日历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,那么它就会起作用。

----------输出正确,是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 ------

long date_1 = r_1.getTimeInMillis()+ 25 * 24 * 60 * 60 * 1000; //我有2到25的变化

r_1.setTimeInMillis(startTime1);

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

由于

3 个答案:

答案 0 :(得分:3)

表达式25*24*60*60*1000是一个整数,你已经溢出了整数的大小,创建了一个负数。

你的表达是2,160,000,000毫秒。 int可以容纳的最大值是2,147,483,647。

要解决此问题,您必须强制表达式为long,如下所示

25L*24*60*60*1000

答案 1 :(得分:0)

25*24*60*60*1000太大而无法放入int。 试试25L*24*60*60*1000这是一个很长的常数。

答案 2 :(得分:0)

尝试类似的东西:

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