Menu
CoddyTech

LocalDateTime 用法

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

Java 中的 LocalDateTime 同时包含日期和时间。当你需要同时处理这两部分时,例如安排活动或处理时间戳,它就很有用。

创建当前日期和时间

LocalDateTime now = LocalDateTime.now();

创建一个特定的日期和时间:

LocalDateTime dateTime = LocalDateTime.of(2024, 3, 15, 14, 30);
// 2024-03-15 14:30

运行上述代码后,dateTime 中包含:

2024-03-15T14:30

格式化日期和时间:

LocalDateTime dateTime = LocalDateTime.of(2024, 3, 15, 14, 30);
String formatted = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));

使用相同的模式从 String 中解析日期和时间:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime parsed = LocalDateTime.parse("2024-03-15 14:30", formatter);  // 2024-03-15T14:30

如果不使用格式化器,LocalDateTime.parse() 只接受 ISO 格式 2024-03-15T14:30。不符合此模式的字符串会抛出 DateTimeParseException,因此要像处理 LocalDate.parse() 那样,用 try-catch 包住这次调用。

challenge icon

挑战

简单

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

  1. 一个格式为 "yyyy-MM-dd HH:mm" 的 String(dateTimeStr)
  2. 一个用于加减的整数(amount)
  3. 一个值为 "hours"、"days" 或 "months" 的 String(unit)
  4. 一个值为 "add" 或 "subtract" 的 String(operation)

该方法应:

  1. 解析输入的日期时间字符串
  2. 执行指定的操作
  3. 返回格式化后的结果信息

返回的消息应为:

  • 如果格式无效:返回 "Invalid date time format"
  • 如果单位无效:返回 "Invalid unit"
  • 如果操作无效:返回 "Invalid operation"
  • 成功时:返回 "Original: [datetime], New: [new_datetime], Day: [day_name]",两个日期时间都使用 yyyy-MM-dd HH:mm 格式,[day_name] 为新日期时间对应的大写星期名称(例如 FRIDAY)

亲手试试

import java.util.Scanner;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;

public class Main {
    public static String processDateTime(String dateTimeStr, int amount, String unit, String operation) {
        // 在这里编写你的代码
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String dateTimeStr = scanner.nextLine();
        int amount = Integer.parseInt(scanner.nextLine());
        String unit = scanner.nextLine();
        String operation = scanner.nextLine();
        
        System.out.println(processDateTime(dateTimeStr, amount, unit, operation));
    }
}
quiz icon自我测试

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

逻辑与流程中的所有课

自己练习: Java 在线编译器