Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 日期已经过去了_Java_Date_Time_Shift - Fatal编程技术网

Java 日期已经过去了

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

我有一个我无法接受的问题——如果我加上超过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 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();

哎呀,是我的错,我检查了好几次都没看到。谢谢。哎呀,是我的错,我检查了好几次都没看到这个。谢谢