1

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

日历 r_1 = new GregorianCalendar(2011,0,1);

r_1.add(日历.DAY_OF_MONTH,2);

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

长日期_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(日历.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太大而无法放入int. 试试25L*24*60*60*1000哪个是长常数。

于 2011-01-12T23:20:50.447 回答