Cách tạo lịch bằng code java
Dưới đây là hàm Java để tạo lịch 5 tuần của một tháng, với đầu vào là ngày hiện tại:
Cách tiếp cận:#
Nhập ngày hiện tại: Dùng lớp
LocalDatetừ Java để làm việc với ngày tháng.Tính toán lịch tháng: Xác định ngày đầu tiên của tháng.
Tìm ngày bắt đầu của tuần đầu tiên (lùi về thứ Hai của tuần đó).
Lập mảng 5 tuần và lấp đầy các giá trị ngày tháng.
Mã nguồn:#
` import java.time.LocalDate; import java.time.DayOfWeek; import java.util.Arrays;
public class CalendarGenerator {
public static String[][] generateCalendar(LocalDate currentDate) {
String[][] calendar = new String[5][7]; // 5 tuần x 7 ngày
// Xác định ngày đầu tiên và cuối cùng của tháng
LocalDate firstDayOfMonth = currentDate.withDayOfMonth(1);
LocalDate lastDayOfMonth = currentDate.withDayOfMonth(currentDate.lengthOfMonth());
// Xác định ngày bắt đầu của tuần đầu tiên (thứ Hai gần nhất hoặc chính nó)
LocalDate startOfCalendar = firstDayOfMonth.with(DayOfWeek.MONDAY);
if (startOfCalendar.isAfter(firstDayOfMonth)) {
startOfCalendar = startOfCalendar.minusWeeks(1);
}
// Điền các giá trị ngày vào bảng lịch
LocalDate dayPointer = startOfCalendar;
for (int week = 0; week < 5; week++) {
for (int day = 0; day < 7; day++) {
if (dayPointer.isBefore(firstDayOfMonth) || dayPointer.isAfter(lastDayOfMonth)) {
calendar[week][day] = ""; // Ngày ngoài tháng
} else {
calendar[week][day] = String.valueOf(dayPointer.getDayOfMonth());
}
dayPointer = dayPointer.plusDays(1);
}
}
return calendar;
}
public static void printCalendar(String[][] calendar) {
String[] daysOfWeek = {"Thứ hai", "Thứ ba", "Thứ tư", "Thứ năm", "Thứ sáu", "Thứ bảy", "Chủ nhật"};
System.out.println(String.join("\t", daysOfWeek));
for (String[] week : calendar) {
System.out.println(String.join("\t", Arrays.stream(week).map(day -> day.isEmpty() ? " " : day).toArray(String[]::new)));
}
}
public static void main(String[] args) {
LocalDate currentDate = LocalDate.of(2024, 12, 15); // Thay đổi ngày hiện tại nếu cần
String[][] calendar = generateCalendar(currentDate);
printCalendar(calendar);
}
} `
Giải thích mã:#
generateCalendar: Tạo lịch 5 tuần dựa trên ngày hiện tại.Xác định ngày đầu tiên và cuối cùng của tháng, sau đó lùi lại để bắt đầu từ thứ Hai của tuần đầu tiên.
Duyệt qua 5 tuần, điền ngày vào mảng
calendar.
printCalendar: Hiển thị lịch bằng cách in ra theo cột (các thứ trong tuần).Dữ liệu đầu vào: Hàm nhận
LocalDatelàm đầu vào, cho phép tính toán linh hoạt với các tháng khác nhau.
Kết quả đầu ra:#
Ví dụ với ngày 15/12/2024, chương trình sẽ in:
Thứ hai Thứ ba Thứ tư Thứ năm Thứ sáu Thứ bảy Chủ nhật 25 26 27 28 29 30 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
Nếu cần thêm tính năng (như đánh dấu sự kiện), hãy cho tôi biết!