java - 如何使用公历在Java中通过出发时间减去到达时间来获得持续时间?

标签 java date time gregorian-calendar

假设我必须用特定日期的出发时间减去到达时间。我将如何使用公历在 Java 中执行此操作?

public Duration getDuration(){
  SimpleDateFormat date = new SimpleDateFormat("YYYYMMDD");
  SimpleDateFormat time = new SimpleDateFormat("HHMM");

  String ArivalTime = "1720"
  String DepartingTime = "1100"
  String ArivalDate = "20200220"
  String DepartingDate = "20200211"

  Calendar departureDateCalc = new GregorianCalendar();


  //return duration;
}

代码几乎什么都没有。但我需要用出发日期减去到达日期

最佳答案

java.time

不要为此使用GregorianCalendar。使用 java.time,现代 Java 日期和时间 API。

    DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HHmm");

    String arrivalTime = "1720";
    String departingTime = "1100";
    String arrivalDate = "20200220";
    String departingDate = "20200211";
    String arrivalTimeZone = "Africa/Niamey";
    String departingTimeZone = "America/Mendoza";

    ZonedDateTime departure = LocalDate.parse(departingDate, DateTimeFormatter.BASIC_ISO_DATE)
            .atTime(LocalTime.parse(departingTime, timeFormatter))
            .atZone(ZoneId.of(departingTimeZone));
    ZonedDateTime arrival = LocalDate.parse(arrivalDate, DateTimeFormatter.BASIC_ISO_DATE)
            .atTime(LocalTime.parse(arrivalTime, timeFormatter))
            .atZone(ZoneId.of(arrivalTimeZone));

    Duration difference = Duration.between(departure, arrival);
    System.out.println(difference);

输出:

PT218H20M

所以一段时间是218小时20分钟。如果您希望它更具可读性:

    String diffString = String.format(
            "%d days %d hours %d minutes", difference.toDays(),
            difference.toHoursPart(), difference.toMinutesPart());
    System.out.println(diffString);

9 days 2 hours 20 minutes

转换为天数时假设一天始终为 24 小时,但在出发时区或到达时区可能并非如此,例如,当它们从标准时间转换为夏令时 (DST) 时,反之亦然。

不要使用公历日历

GregorianCalendar 类设计不佳且早已过时。不要使用它。为了任何东西。如果您想使用它来查找持续时间,则方法是在出发时间上一次添加一天,直到到达到达时间。如果超过了,请再次减去一天并开始计算小时数,再次一次添加一小时。分钟也一样。与直接使用 Duration 类相比,它方式更复杂,也更容易出错。

链接

Oracle tutorial: Date Time解释如何使用 java.time。

关于java - 如何使用公历在Java中通过出发时间减去到达时间来获得持续时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60126428/

相关文章:

java - 字符串到 HH :mm:ss time and finding the difference between 2 times

java - Java和Javac在cmd中不起作用。 java和javac “is not recognized as an internal..”

PHP:更改日期/strftime/strtotime 中的语言

python - 等到具体时间

javascript - 如何将数组中的日期字符串更新为mongoDB中的日期格式?

java - 将自定义日期格式转换为 unixtime

python - pygame - 如何在没有 time.sleep() 的情况下缓慢更新 HP 条

Java 8 - ZonedDateTime 的 DateTimeFormatter 和 ISO_INSTANT 问题

java - 递归以相反的顺序打印整数

java - 尝试启动 VM 时 Azure ApplicationTokenCredentials 中出现评估错误 (NoSuchMethodError)