如何用java打印日历

打印日历的Java实现方法
打印日历可以通过Java的Calendar类或LocalDate类实现。以下是两种不同的实现方式:

使用Calendar类
import java.util.Calendar;
public class PrintCalendar {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
printCalendar(year, month);
}
public static void printCalendar(int year, int month) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month, 1);
int startDay = calendar.get(Calendar.DAY_OF_WEEK);
int numberOfDays = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println("Sun Mon Tue Wed Thu Fri Sat");
for (int i = 1; i < startDay; i++) {
System.out.print(" ");
}
for (int i = 1; i <= numberOfDays; i++) {
System.out.printf("%3d ", i);
if ((i + startDay - 1) % 7 == 0) {
System.out.println();
}
}
}
}
使用LocalDate类(Java 8+)
import java.time.LocalDate;
import java.time.format.TextStyle;
import java.util.Locale;
public class PrintCalendar {
public static void main(String[] args) {
LocalDate date = LocalDate.now();
printCalendar(date.getYear(), date.getMonthValue());
}
public static void printCalendar(int year, int month) {
LocalDate date = LocalDate.of(year, month, 1);
String monthName = date.getMonth().getDisplayName(TextStyle.FULL, Locale.getDefault());
System.out.println(" " + monthName + " " + year);
System.out.println("Su Mo Tu We Th Fr Sa");
int startDay = date.getDayOfWeek().getValue() % 7;
int lengthOfMonth = date.lengthOfMonth();
for (int i = 0; i < startDay; i++) {
System.out.print(" ");
}
for (int i = 1; i <= lengthOfMonth; i++) {
System.out.printf("%2d ", i);
if ((i + startDay) % 7 == 0) {
System.out.println();
}
}
}
}
自定义日历打印功能
如果需要更灵活的日历打印功能,可以扩展上述代码:
public static void printCustomCalendar(int year, int month, int startDayOffset) {
LocalDate date = LocalDate.of(year, month, 1);
int startDay = (date.getDayOfWeek().getValue() + startDayOffset) % 7;
int lengthOfMonth = date.lengthOfMonth();
String[] dayNames = {"Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"};
for (String day : dayNames) {
System.out.print(day + " ");
}
System.out.println();
for (int i = 0; i < startDay; i++) {
System.out.print(" ");
}
for (int i = 1; i <= lengthOfMonth; i++) {
System.out.printf("%2d ", i);
if ((i + startDay) % 7 == 0) {
System.out.println();
}
}
}
注意事项
- 月份在
Calendar类中是从0开始计数的(0=一月,11=十二月) LocalDate的月份是从1开始计数的(1=一月,12=十二月)- 星期几的表示方式在不同地区可能不同,可以通过
Locale参数调整 - 输出格式可以根据需要调整空格和换行符
这两种方法都可以实现基本的日历打印功能,LocalDate版本更现代且线程安全,推荐在Java 8及以上版本使用。






