首页 > 解决方案 > 获取正确的小时和分钟时出错

问题描述

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();

}

我也使用了 jodatime 和 simpledateformat http://www.joda.org/joda-time/userguide.html

输出:

hours0
minutes12

标签: javacore

解决方案


要正确计算两个日期之间的小时和分钟,使用 Java 8 Time API 并忽略夏令时,您可以这样做:

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 = Duration.between(date1, date2);
System.out.printf("%d hours %d minutes%n", duration.toHours(), duration.toMinutesPart());

输出(来自两者)

0 hours 48 minutes

推荐阅读