如何使用公历通过 Java 中的出发时间减去到达时间来获得持续时间?
How to get duration by subtracting Arrival time by departing time in Java using 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
GregorianCalendar
class 设计不佳且早已过时。不要使用它。为了任何东西。如果您想用它来查找持续时间,方法是每次将出发时间加一天,直到到达到达时间。如果你过了它,再减去一天并开始计算小时数,再次一次加一。与分钟相同。 方式比直接使用Duration
class更复杂,也更容易出错。
Link
Oracle tutorial: Date Time 解释如何使用 java.time.
假设我必须用特定日期的出发时间减去到达时间。我如何在 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
GregorianCalendar
class 设计不佳且早已过时。不要使用它。为了任何东西。如果您想用它来查找持续时间,方法是每次将出发时间加一天,直到到达到达时间。如果你过了它,再减去一天并开始计算小时数,再次一次加一。与分钟相同。 方式比直接使用Duration
class更复杂,也更容易出错。
Link
Oracle tutorial: Date Time 解释如何使用 java.time.