Menu
CoddyTech

Đị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ệ
}
challenge icon

Thử thách

Dễ

Tạo một phương thức có tên formatDate nhận ba đối số:

  1. Một chuỗi (dateStr): ngày tháng, được viết theo mẫu đầu vào
  2. Một chuỗi (inputPattern): mẫu ngày tháng đầu vào
  3. Một chuỗi (outputPattern): mẫu đầu ra mong muốn

Phương thức này cần:

  1. Phân tích ngày tháng đầu vào bằng mẫu đầu vào
  2. Định dạng ngày tháng bằng mẫu đầu ra
  3. 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));
    }
}
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch Java online