Định dạng ngày tháng
Thuộc phần Logic và luồng chương trình trong hành trình Java của Coddy. Bài học 58 trên 59.
DateTimeFormatter trong Java cho phép bạn định dạng ngày và giờ theo nhiều mẫu khác nhau. Bạn có thể dùng nó với LocalDate, LocalTime và LocalDateTime.
Tạo một bộ định dạng với mẫu cụ thể:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");Định dạng ngày bằng bộ định dạng:
LocalDate date = LocalDate.of(2024, 3, 15);
String formatted = date.format(formatter);Sau khi chạy đoạn code trên, formatted chứa:
2024-03-15
Phân tích một chuỗi thành ngày:
String dateStr = "2024-03-15";
LocalDate date = LocalDate.parse(dateStr, formatter);Cả hai bước đều có thể xảy ra lỗi. DateTimeFormatter.ofPattern() ném ra IllegalArgumentException khi mẫu không hợp lệ, chẳng hạn như ofPattern("invalid"), vì i không phải là chữ cái trong mẫu. LocalDate.parse() ném ra DateTimeParseException khi văn bản không khớp với mẫu hoặc không phải là ngày hợp lệ, chẳng hạn như "2024-13-45". IllegalArgumentException nằm trong java.lang, nên không cần nhập:
try {
DateTimeFormatter f = DateTimeFormatter.ofPattern(pattern);
LocalDate d = LocalDate.parse(text, f);
} catch (DateTimeParseException e) {
// chuỗi không khớp với mẫu
} catch (IllegalArgumentException e) {
// mẫu không hợp lệ
}Thử thách
DễTạo một phương thức có tên formatDate nhận ba đối số:
- Một chuỗi (
dateStr): ngày tháng, được viết theo mẫu đầu vào - Một chuỗi (
inputPattern): mẫu ngày tháng đầu vào - Một chuỗi (
outputPattern): mẫu đầu ra mong muốn
Phương thức này cần:
- Phân tích ngày tháng đầu vào bằng mẫu đầu vào
- Định dạng ngày tháng bằng mẫu đầu ra
- Xử lý các mẫu sau:
- "basic": "yyyy-MM-dd"
- "long": "MMMM d, yyyy"
- "short": "MM/dd/yy"
- "custom": Chuỗi mẫu thực tế
Giá trị trả về cần là:
- Nếu ngày tháng không hợp lệ: trả về "Invalid date format"
- Nếu mẫu không hợp lệ: trả về "Invalid pattern"
- Nếu thành công: trả về ngày tháng đã định dạng
Tự làm thử
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) {
// Viết code của bạn ở đây
}
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));
}
}Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng chương trình
1Mảng đa chiều
Kiến thức cơ bản về mảng 2DTruy cập phần tử trong mảng 2DVòng lặp lồng nhau với mảng 2DÔn tập về mảng 2DPhép cộng và phép trừ ma trậnMảng không đềuMảng 3D trở lênCác mẫu thường gặp với mảng 2DÔn tập về mảng4HashSet phần 1
HashSet là gì?Thêm một phần tửXóa một phần tửKiểm tra phần tử có tồn tại khôngRỗng và kích thướcXóa và sao chépÔn tập: HashSet10Ngày và giờ
Kiến thức cơ bản về LocalDateCác thao tác với LocalTimeCách dùng LocalDateTimePeriod và DurationĐịnh dạng ngày thángXử lý múi giờ2HashMap phần 1
HashMap là gì?Khai báo HashMapTruy cập giá trịKiểm tra khóa có tồn tạiChỉnh sửa từ điểnÔn tập: HashMapTự luyện tập: Trình biên dịch Java online