使用 SimpleDateFormat 在 Java 中计算时差返回 13:15 小时而不是 1:15 小时,例如(结束


private double calculateAverageSpeed() {
SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss", Locale.ENGLISH);
try {
double totalTime;
totalTime = (format.parse(stopTime + ":00").getTime()) - (format.parse(startTime + ":00").getTime());
return (milesDriven / totalTime);
} catch (ParseException e) {
e.printStackTrace();
}
return 0;
}

您正在解析看起来像 24 小时制时间的字符串,其格式说明符需要 12 小时时间,带有 AM/PM 指示器 (hh:mm:ss(。

我的猜测是"12:01"被解释为午夜后一分钟。 使用 HH:mm:ss 表示 24 小时制。

我希望这会对您有所帮助
您也可以使用时间格式"HH:mm"作为 24 小时格式,我使用了"hh:mm">

如果您使用"HH:mm">

你会得到这样的结果

时间:太平洋标准时间 1970 年 1 月 1 日星期四 12:01:00 72060000 时间:太平洋标准时间 1 月 1 日星期四 13:16:00 1970 76560000 diff==4500000


总计时间=1
42.0

import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class TimeDifference {
public static void main(String[] args) throws ParseException {
System.out.println(calculateAverageSpeed("12:01","13:16",42.0));

}
private static double calculateAverageSpeed(String time1,String time2, double 
miles) throws ParseException { 
DecimalFormat decimalFormatter = new DecimalFormat("###,###");

SimpleDateFormat format = new SimpleDateFormat("hh:mm", Locale.ENGLISH);
Date date = format.parse(time1);
Date date2 = format.parse(time2);
System.out.println("Time: " + date+ " "+date.getTime());
System.out.println("Time: " + date2+ " "+date2.getTime());
long diff = date2.getTime() - date.getTime();
System.out.println("diff=="+diff); 
int totalTime = (int)(diff/(60*60*1000));
System.out.println("totalTime="+decimalFormatter.format(totalTime));
return  (miles / totalTime);
}

}

你会得到这个结果. 时间:太平洋标准时间 1970 年 1 月 1 日星期四 00:01:00 28860000 时间:太平洋标准时间 1970 年 1 月 1 日星期四 13:16:00 76560000
diff==47700000

总计时间=13
3.230769230769231

相关内容

最新更新