奇怪的约会行为?

时间:2012-11-28 09:56:11

标签: java date

life  = 91
today = System.currentTimeMillis()
expireDate = new Date(today + life * 24 * 3600 * 1000);

new Date(today)按预期返回今天的日期Wed Nov 28 15:21:01 GMT+05:30 2012

为什么new Date(expireDate)会在今天的日期之前返回Tue Nov 20 05:17:16 GMT+05:30 2012,那时我真的希望提前约会?

2 个答案:

答案 0 :(得分:6)

这是因为您今天添加的值是一个int,它实际上超出了Integer.MAX_VALUE,当发生这种情况时,它从Integer.MIN_VALUE开始。

要解决此问题,请将其中一个值声明为long。例如,3600可以是3600l

答案 1 :(得分:1)

尝试

int life = 91;
long today = System.currentTimeMillis();
Date expireDate = new Date(today + life * 24 * 3600 * 1000L);
System.out.println(expireDate);

打印

Wed Feb 27 10:03:32 GMT 2013

注意:我使用1000L来防止溢出,因此会life成为long