如何通过使用格里高利历法在Java中通过离开时间减去到达时间来获得持续时间?

问题描述 投票:0回答:1

假设我必须通过特定天数的出发时间减去到达时间。我如何使用格里高利历法在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 date time gregorian-calendar
1个回答
3
投票

java.time

请勿为此使用GregorianCalendar。使用现代的Java日期和时间API java.time。

    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天2小时20分钟

转换为天时假设一天始终为24小时,在出发或到达时区可能都不是这种情况,例如,当它们从标准时间转换为夏令时(DST)时,反之亦然。] >

不要使用GregorianCalendar

GregorianCalendar类的设计很差,而且已经过时了。不要使用它。为了任何东西。如果您想使用它来查找持续时间,则方法是一次在出发时间增加一天,直到到达到达时间。如果您已逾时,请再次减去一天,然后开始计时,再一次增加一小时即可。与分钟相同。与直接使用Duration类相比,它[更复杂,也更容易出错。链接

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

© www.soinside.com 2019 - 2024. All rights reserved.