日期格式化
本课属于 Coddy Java 学习旅程的“逻辑与流程”单元。第 58 课,共 59 课。
DateTimeFormatter 在 Java 中可以按不同格式设置日期和时间。它可以与 LocalDate、LocalTime 和 LocalDateTime 一起使用。
创建一个具有特定模式的格式化器:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");使用格式化器格式化日期:
LocalDate date = LocalDate.of(2024, 3, 15);
String formatted = date.format(formatter);运行上述代码后,formatted 中包含:
2024-03-15
将字符串解析为日期:
String dateStr = "2024-03-15";
LocalDate date = LocalDate.parse(dateStr, formatter);这两个步骤都可能失败。当模式本身无效时,DateTimeFormatter.ofPattern() 会抛出 IllegalArgumentException,例如 ofPattern("invalid"),因为 i 不是模式字母。当文本与模式不匹配或不是一个真实日期时,LocalDate.parse() 会抛出 DateTimeParseException,例如 "2024-13-45"。IllegalArgumentException 位于 java.lang 中,因此不需要导入:
try {
DateTimeFormatter f = DateTimeFormatter.ofPattern(pattern);
LocalDate d = LocalDate.parse(text, f);
} catch (DateTimeParseException e) {
// 文本与模式不匹配
} catch (IllegalArgumentException e) {
// 模式无效
}挑战
简单创建一个名为 formatDate 的方法,它接受三个参数:
- 一个 String(
dateStr):日期,按输入格式编写 - 一个 String(
inputPattern):输入日期的格式 - 一个 String(
outputPattern):所需的输出格式
该方法应执行以下操作:
- 使用输入格式解析输入日期
- 使用输出格式格式化日期
- 处理以下格式:
- "basic":"yyyy-MM-dd"
- "long":"MMMM d, yyyy"
- "short":"MM/dd/yy"
- "custom":实际的格式字符串
返回消息应为:
- 如果日期无效:返回 "Invalid date format"
- 如果格式无效:返回 "Invalid pattern"
- 成功时:返回格式化后的日期
亲手试试
import java.util.Scanner;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
public class Main {
public static String formatDate(String dateStr, String inputPattern, String outputPattern) {
// 在这里编写你的代码
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String dateStr = scanner.nextLine();
String inputPattern = scanner.nextLine();
String outputPattern = scanner.nextLine();
System.out.println(formatDate(dateStr, inputPattern, outputPattern));
}
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: Java 在线编译器