TopDev

Viết hàm java hiện thi lịch theo tháng

minhdev 📖 2 phút đọc 💬 1 phản hồi

Dưới đây là một hàm Java để hiển thị lịch từ tháng trước đến tháng sau, khi người dùng truyền vào tháng và năm cụ thể:

Giải thích:#

  • YearMonth: Lớp này đại diện cho một tháng cụ thể trong một năm.

  • printMonthCalendar: Hàm này hiển thị lịch của một tháng với tuần bắt đầu từ Thứ Hai.

  • Ngày bắt đầu của tháng: Sử dụng LocalDate để lấy ngày đầu tiên của tháng và xác định thứ trong tuần.

  • Xuống dòng sau mỗi tuần: Sử dụng (startDayOfWeek + day - 1) % 7 == 0 để xác định khi nào cần xuống dòng.

Cách chạy:#

  • Đổi giá trị trong main để thử nghiệm với các tháng và năm khác nhau. Ví dụ: displayCalendarRange(12, 2024);.

Kết quả:#

Hàm sẽ in lịch của tháng trước, tháng hiện tại, và tháng sau theo định dạng dễ nhìn.

1 phản hồi

  1. minhdev #1

    ` import java.time.LocalDate; import java.time.YearMonth; import java.time.format.TextStyle; import java.util.Locale;

    public class CalendarDisplay {

    public static void displayCalendarRange(int month, int year) {
        // Lấy thông tin tháng trước, hiện tại, và tháng sau
        YearMonth currentMonth = YearMonth.of(year, month);
        YearMonth previousMonth = currentMonth.minusMonths(1);
        YearMonth nextMonth = currentMonth.plusMonths(1);
    
        // Hiển thị lịch của từng tháng
        System.out.println("\n--- Calendar for " + previousMonth.getMonth().getDisplayName(TextStyle.FULL, Locale.ENGLISH) + " " + previousMonth.getYear() + " ---");
        printMonthCalendar(previousMonth);
    
        System.out.println("\n--- Calendar for " + currentMonth.getMonth().getDisplayName(TextStyle.FULL, Locale.ENGLISH) + " " + currentMonth.getYear() + " ---");
        printMonthCalendar(currentMonth);
    
        System.out.println("\n--- Calendar for " + nextMonth.getMonth().getDisplayName(TextStyle.FULL, Locale.ENGLISH) + " " + nextMonth.getYear() + " ---");
        printMonthCalendar(nextMonth);
    }
    
    private static void printMonthCalendar(YearMonth yearMonth) {
        int daysInMonth = yearMonth.lengthOfMonth();
        LocalDate firstDayOfMonth = yearMonth.atDay(1);
    
        // Lấy ngày bắt đầu (thứ trong tuần) của tháng
        int startDayOfWeek = firstDayOfMonth.getDayOfWeek().getValue(); // 1 = Monday, ..., 7 = Sunday
    
        // Tiêu đề tuần
        System.out.println("Mon Tue Wed Thu Fri Sat Sun");
    
        // In khoảng trắng trước ngày đầu tiên
        for (int i = 1; i < startDayOfWeek; i++) {
            System.out.print("    ");
        }
    
        // In các ngày trong tháng
        for (int day = 1; day <= daysInMonth; day++) {
            System.out.printf("%3d ", day);
    
            // Xuống dòng khi hết tuần (chủ nhật)
            if ((startDayOfWeek + day - 1) % 7 == 0) {
                System.out.println();
            }
        }
    
        System.out.println(); // Dòng trống cuối tháng
    }
    
    public static void main(String[] args) {
        // Ví dụ: Hiển thị lịch từ tháng 3/2025
        displayCalendarRange(3, 2025);
    }
    

    }

    `

Bài liên quan trong #Java

✓ Đã sao chép link