Menu
CoddyTech

Period 和 Duration

本课属于 Coddy Java 学习旅程的“逻辑与流程”单元。第 57 课,共 59 课。

Period 表示基于日期的时间量(年、月、日),而 Duration 表示基于时间的量(小时、分钟、秒)。

创建一个 Period:

Period period = Period.of(1, 2, 15);
// 1 年 2 个月 15 天

创建一个 Duration:

Duration duration = Duration.ofHours(2);
// 2 小时
Duration minutes = Duration.ofMinutes(90);
// 90 分钟

运行上述代码后,period 的值为:

P1Y2M15D  // ISO-8601 格式

使用 Period.between() 测量两个日期之间的间隔。它接收两个 LocalDate 值,并将间隔拆分成年、月和日:

LocalDate start = LocalDate.of(2024, 1, 15);
LocalDate end = LocalDate.of(2025, 3, 20);
Period p = Period.between(start, end);
p.getYears();   // 1
p.getMonths();  // 2
p.getDays();    // 5

getDays() 只返回扣除整年和整月后剩下的天数,而不是两个日期之间的总天数。LocalDateTime 可以通过 toLocalDate() 获取它的日期。

使用 Duration.between() 测量两个时间之间的间隔,它接受两个 LocalDateTime(或 LocalTime)值:

LocalDateTime from = LocalDateTime.of(2024, 3, 15, 10, 30);
LocalDateTime to = LocalDateTime.of(2024, 3, 15, 14, 45);
Duration d = Duration.between(from, to);
d.toHours();        // 4
d.toMinutes();      // 255
d.toMinutesPart();  // 15

toMinutes() 会计算整个间隔的分钟数,包括小时。toMinutesPart() 会给出扣除整小时后剩余的分钟数,因此这个间隔是 4 小时 15 分钟。

challenge icon

挑战

简单

创建一个名为 calculateDifference 的方法,它接受四个参数:

  1. 一个格式为 "yyyy-MM-dd HH:mm" 的 String(start)
  2. 一个格式为 "yyyy-MM-dd HH:mm" 的 String(end)
  3. 一个值为 "period" 或 "duration" 的 String(unit)
  4. 一个值为 "full" 或 "simple" 的 String(format)

该方法应该:

  1. 计算开始日期和结束日期之间的差值
  2. 以指定格式返回差值

返回的消息应为:

  • 日期无效时:返回 "Invalid date format"
  • 单位无效时:返回 "Invalid unit"
  • 格式无效时:返回 "Invalid format"
  • 当 unit 为 "period" 且格式为 "full" 时:"Years: X, Months: Y, Days: Z"
  • 当 unit 为 "period" 且格式为 "simple" 时:"XyYmZd"
  • 当 unit 为 "duration" 且格式为 "full" 时:"Hours: X, Minutes: Y",其中 Y 是扣除整小时后剩余的分钟数
  • 当 unit 为 "duration" 且格式为 "simple" 时:"XhYm"

亲手试试

import java.util.Scanner;
import java.time.*;
import java.time.format.*;

public class Main {
    public static String calculateDifference(String start, String end, String unit, String format) {
        // 在这里编写你的代码
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String start = scanner.nextLine();
        String end = scanner.nextLine();
        String unit = scanner.nextLine();
        String format = scanner.nextLine();
        
        System.out.println(calculateDifference(start, end, unit, format));
    }
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: Java 在线编译器