Java 日期已经过去了
我有一个我无法接受的问题——如果我加上超过24天,那就是过去改变的日期Java 日期已经过去了,java,date,time,shift,Java,Date,Time,Shift,我有一个我无法接受的问题——如果我加上超过24天,那就是过去改变的日期 long start = System.currentTimeMillis(); long shift = 3600000 * 24 * 24; System.out.println(new Date(start)); System.out.println(new Date(start + shift)); 24日班: start - Wed Apr 18 11:37:12 CEST 2012 end - Sat May
long start = System.currentTimeMillis();
long shift = 3600000 * 24 * 24;
System.out.println(new Date(start));
System.out.println(new Date(start + shift));
24日班:
start - Wed Apr 18 11:37:12 CEST 2012
end - Sat May 12 11:37:12 CEST 2012
start - Wed Apr 18 11:37:55 CEST 2012
end - Sat Mar 24 17:35:08 CET 2012
25日班:
start - Wed Apr 18 11:37:12 CEST 2012
end - Sat May 12 11:37:12 CEST 2012
start - Wed Apr 18 11:37:55 CEST 2012
end - Sat Mar 24 17:35:08 CET 2012
有人能告诉我为什么它会这样吗?谢谢。您正在进行整数乘法,然后将结果转换为长整数。乘法溢出,因此结果为负 使用以下代码执行长乘法:
long shift = 3600000L * 24 * 24;
您正在执行整数乘法,然后将结果转换为长整数。乘法溢出,因此结果为负 使用以下代码执行长乘法:
long shift = 3600000L * 24 * 24;
我真的建议不要用这种方式解决你的问题;改用java.util.Calendar。它更有可能处理诸如夏令时的变化这样的极端情况,而且API更好
Calendar cal = Calendar.getInstance();
cal.setTime(new Date(start));
cal.add(Calendar.DAY_OF_MONTH, 24)
Date shifted = cal.getTime();
我真的建议不要用这种方式解决你的问题;改用java.util.Calendar。它更有可能处理诸如夏令时的变化这样的极端情况,而且API更好
Calendar cal = Calendar.getInstance();
cal.setTime(new Date(start));
cal.add(Calendar.DAY_OF_MONTH, 24)
Date shifted = cal.getTime();
也许您应该使用java.util.Calendar,如下所示:
Calendar c = GregorianCalendar.getInstance(); //time default to now
c.add(Calendar.DATE, 24); //adds 24 days
Date end = c.getTime();
也许您应该使用java.util.Calendar,如下所示:
Calendar c = GregorianCalendar.getInstance(); //time default to now
c.add(Calendar.DATE, 24); //adds 24 days
Date end = c.getTime();
哎呀,是我的错,我检查了好几次都没看到。谢谢。哎呀,是我的错,我检查了好几次都没看到这个。谢谢