Java 获取正确的小时和分钟时出错

Java 获取正确的小时和分钟时出错,java,core,Java,Core,我还使用了jodatime和simpledateformat 输出: public class Testdate_time { public void testdate() throws ParseException { String in_time = "2018 May 07 09:20:01 AM"; String out_time = "2018 May 07 10:08:29 AM"; int hours = 0; int mintues = 0;

我还使用了jodatime和simpledateformat

输出:

public class Testdate_time {

public void testdate() throws ParseException {

    String in_time = "2018 May 07 09:20:01 AM";
    String out_time = "2018 May 07 10:08:29 AM";
    int hours = 0;
    int mintues = 0;
    org.joda.time.format.DateTimeFormatter format = DateTimeFormat.forPattern("yyyy MMM dd hh:mm:ss a");
    DateTime date1 = format.parseDateTime(in_time);
    DateTime date2 = format.parseDateTime(out_time);
    hours = Hours.hoursBetween(date1, date2).getHours();

    String strhours = String.valueOf(hours).replaceAll("-", "");
    mintues = date1.getMinuteOfHour() - date2.getMinuteOfHour();
    String Strminutes = String.valueOf(mintues).replaceAll("-", "");
    System.out.println("hours" + strhours);
    System.out.println("minutes" + Strminutes);

}

public static void main(String[] args) throws ParseException {

    new Testdate_time().testdate();

}

要正确计算两个日期之间的小时和分钟,请使用Java 8 Time API并忽略夏令时,如下所示:

hours0
minutes12
或者,如果您不想自己计算,请使用:

输出(来自两者)

0小时48分钟

因为你要单独计算分钟数,所以你的分钟数输出是20-8,因此是12。#但是为什么不计算小时数()从
09:20
10:08
之间的间隔不到1小时,所以
hoursbough()
返回
0
。在
08
20
之间有12分钟,因此
minutes=12
。理解这一点有什么困难?因为你们的约会间隔不到一个小时。顺便说一句:你们并没有说出你们期望的。你应该期待一个很好的计算,比如说
0小时48分钟
,但是你应该计算
diff=minutesbever()
,而不是放弃符号,然后计算
hours=diff/60
minutes=diff%60
。也许我只是讨厌任何应用于日期/时间值的算术,但是你可以做更多的事情,完全依靠API@MadProgrammer还添加了
持续时间
解决方案。
String in_time = "2018 May 07 09:20:01 AM";
String out_time = "2018 May 07 10:08:29 AM";
DateTimeFormatter format = DateTimeFormatter.ofPattern("uuuu MMM dd hh:mm:ss a", Locale.US);
LocalDateTime date1 = LocalDateTime.parse(in_time, format);
LocalDateTime date2 = LocalDateTime.parse(out_time, format);

long diff = ChronoUnit.MINUTES.between(date1, date2);
System.out.printf("%d hours %d minutes%n", diff / 60, diff % 60);
Duration duration = Duration.between(date1, date2);
System.out.printf("%d hours %d minutes%n", duration.toHours(), duration.toMinutesPart());