我正在尝试计算两个日期/时间之间的时间差。这就是我导入的内容:
import java.util.concurrent.TimeUnit;
import java.text.*;
import java.util.*;
这是我的代码:
SimpleDateFormat format= new SimpleDateFormat("yy/MM/dd HH:mm:ss");
String dateStart = "11/03/14 19:29:58";
String dateStop = "11/05/14 08:03:13";
Date d1=null;
Date d2=null;
try{
d1 = format.parse(dateStart);
d2=format.parse(dateStop);
}
catch(ParseException e)
{
e.printStackTrace();
}
long diff = d2.getTime()-d1.getTime();
long seconds = TimeUnit.MILLISECONDS.toSeconds(diff);
long minutes=TimeUnit.MILLISECONDS.toMinutes(diff);
System.out.println(minutes);
我认为这应该可以正常工作,但不是正确的答案我得到“87153”。错误的根源是什么?如何纠正?
答案 0 :(得分:6)
这看起来对我来说是正确的......你已经有两个月了,所以60.5天(因为它从晚上8点开始到早上8点结束)。一天包含1440分钟。 1440 * 60.5是87120,非常接近你收到的答案。
不清楚你期望的答案,但Java正确的数学。错误的来源可能是您的期望:)
(顺便说一下,您可能希望指定UTC的时区,除非您希望这样的计算使用您的本地时区。由于这个原因,您可以轻松获得距离预期结果一小时的答案。)
答案 1 :(得分:3)
这似乎是正确的。
long seconds = TimeUnit.MILLISECONDS.toSeconds(diff);
System.out.println(seconds);
long minutes=TimeUnit.MILLISECONDS.toMinutes(diff);
System.out.println(minutes);
long hours=TimeUnit.MILLISECONDS.toHours(diff);
System.out.println(hours);
long days=TimeUnit.MILLISECONDS.toDays(diff);
System.out.println(days);
输出为
5229195
87153
1452
60
这似乎是正确的......你有两个月的差异吧?
或者检查您的日期假设。可能是你用 dd 和 yy 做出了一些错误的假设,尝试将 yyyy 放在一起,并在你的一年内将其更正为2011年或2014年根据你的期望。这是我的结果:P
答案 2 :(得分:0)
始终使用日历:
import java.text.SimpleDateFormat;
import java.util.concurrent.TimeUnit;
import java.text.*;
import java.util.*;
public class DateDiff {
public static void main(String[] arg){
SimpleDateFormat format= new SimpleDateFormat("yy/MM/dd HH:mm:ss");
String dateStart = "11/03/14 08:03:58";
String dateStop = "11/05/14 08:20:13";
Date d1=null;
Date d2=null;
try{
d1 = format.parse(dateStart);
d2 = format.parse(dateStop);
}
catch(ParseException e)
{
e.printStackTrace();
}
Calendar cal1 = Calendar.getInstance();
cal1.setTime(d1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(d2);
long seconds = cal2.get(Calendar.SECOND) - cal1.get(Calendar.SECOND);
long minutes= cal2.get(Calendar.MINUTE) - cal1.get(Calendar.MINUTE);
System.out.println(minutes);
System.out.println(seconds);
}
}