Java 在未来日期中获取过去日期结果

Java 在未来日期中获取过去日期结果,java,Java,我有密码: java.util.Date purgeBackDate = new java.util.Date(System.currentTimeMillis() - (1000 * 60 * 60 * 24 * 390)); System.out.println(purgeBackDate); 我原本希望打印390天前的日期,但实际上,它打印的是未来的日期:2015年8月21日星期五05:57:11美国东部夏令时 我还尝试用新的java.util.Date.getTime替换System.

我有密码:

java.util.Date purgeBackDate = new java.util.Date(System.currentTimeMillis() - (1000 * 60 * 60 * 24 * 390));
System.out.println(purgeBackDate);
我原本希望打印390天前的日期,但实际上,它打印的是未来的日期:2015年8月21日星期五05:57:11美国东部夏令时

我还尝试用新的java.util.Date.getTime替换System.currentTimeMillis,得到了相同的结果。我很困惑,因为以前使用毫秒的负数


我使用的JDK1.6和1.7都给出了这样的结果:

你的乘法都是整数,并且溢出到一个负数,减去这个负数,就得到了未来的日期


将1000转换为long或使用long literal 1000L来使用更宽的有效数字范围,并获得正确的要减去的数字,您将得到一个过去的日期。

您的乘法都是整数,并且溢出到一个负数,当减去它时,将产生一个未来的日期

将1000转换为long或使用long literal 1000L来使用更宽的有效数字范围,并获得正确的减法数字,您将获得过去的日期。

请尝试日历:

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_YEAR, -390);
请改用日历:

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_YEAR, -390);

它解决了问题,但如果只需要一个日期,它不是一个自己处理毫秒的好方法。它解决了问题,但如果只需要一个日期,它不是一个自己处理毫秒的好方法。