用java计算时差
我想用java计算时差。我仅在1小时内成功计算。当我输入1小时以上的时间时,计算是错误的用java计算时差,java,Java,我想用java计算时差。我仅在1小时内成功计算。当我输入1小时以上的时间时,计算是错误的 String start= "12:00:00"; String end= "12:50:00"; SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss"); Date date1 = format.parse(start); Date date2 = format.parse(end); long diff
String start= "12:00:00";
String end= "12:50:00";
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
Date date1 = format.parse(start);
Date date2 = format.parse(end);
long difference = date2.getTime() - date1.getTime();
System.out.println(difference/1000);
double time = difference/1000;
double tot = time/60;
JOptionPane.showMessageDialog(this, tot);
从上述代码中成功显示50分钟的结果
我修改了相同的代码,代码如下所示:
String start = "12:00:00";
String end = "01:50:00";
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
Date date1 = format.parse(start);
Date date2 = format.parse(end);
long difference = date2.getTime() - date1.getTime();
System.out.println(difference/1000);
double time = difference/1000;
double tot = time/60;
JOptionPane.showMessageDialog(this, tot);
这里显示结果
-610.0我不知道为什么我需要显示1.50的输出
字母|日期或时间成分一天中的小时数(0-23)。
上午/下午小时(1-12) 因此,在您的例子中,有代表24小时时间格式的
“HH:mm:ss”
。
从00:00开始到23:59
因此,对于上述模式,您可以将其更改为如下所示:
String start = "12:00:00";
String end = "13:50:00";
或者,您可以按如下方式更改您的模式:
SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss");
String start = "12:00:00";
String end = "01:50:00";
请参见结果:,因为您在AM | PM表单中输入了时间,但您的代码应该使用24小时时间格式。 把时间从
String end = "01:50:00";
到
它将像一个符咒一样工作:)
(或者您可以将代码更改为使用AM-PM时间模型,但这将更加困难。实际上,我将使用新的OffsetTime类来解决此问题 下面是一些示例代码:
public static void distance(String strTime1, String strTime2) {
OffsetTime time1 = OffsetTime.parse(strTime1);
OffsetTime time2 = OffsetTime.parse(strTime2);
int time1Seconds = time1.get(ChronoField.MINUTE_OF_DAY);
int time2Seconds = time2.get(ChronoField.MINUTE_OF_DAY);
System.out.println("Time 1 in seconds: " + time1Seconds);
System.out.println("Time 1 in seconds: " + time2Seconds);
System.out.println("Distance: " + Math.abs(time1Seconds - time2Seconds));
}
您要做的是将一个字符串simliar解析到您的字符串中。不同的是,我建议您始终添加时区信息。因为它在您的情况下可能不太重要,所以我只添加+00:00
请不要使用Mathematic.abs()。只要您对两次之间的距离感兴趣,而不是对距离的方向感兴趣,您就可以使用它来去除正负前缀,并使用绝对值
这样,您就可以通过解析这个字符串来创建OffsetTime。然后您就可以读取一天中的分钟数
请尝试以下方法:
public static void main(String[] args) {
distance("10:00:00+00:00", "12:00:00+00:00");
distance("12:30:00+00:00", "12:31:00+00:00");
distance("12:31:00+00:00", "12:30:00+00:00");
}
结果将是:
Time 1 in seconds: 600
Time 1 in seconds: 720
Distance: 120
Time 1 in seconds: 750
Time 1 in seconds: 751
Distance: 1
Time 1 in seconds: 751
Time 1 in seconds: 750
Distance: 1
你提到你需要分钟的分数,比如1.5。分数总是很复杂而且不精确。这就是为什么人们发明了BigDecimal。但是,在你的情况下,BigDecimal没有帮助。我建议你使用更小的单位,比如秒
只需将代码更改为:
int time1Seconds = time1.get(ChronoField.SECOND_OF_DAY);
int time2Seconds = time2.get(ChronoField.SECOND_OF_DAY);
以下是一些Javadocs:
以及新课程的教程(JDK8):
是的,凌晨两点前10点是中午之前-你在想什么?这是对24小时和12小时格式的要求吗?还是你想坚持12小时格式?你是否计划使用ad AM/PM标识符?是的,皮罗说恢复监控你的时间是24小时。1:50是12小时之前,所以它应该是负值并获得cu纠正answer@Javafiversry答案未完全发布。已更新
int time1Seconds = time1.get(ChronoField.SECOND_OF_DAY);
int time2Seconds = time2.get(ChronoField.SECOND_OF_DAY);