人类社会离不开历法。
Date 类的实例有一个状态,既定的时间点。时间是用距离一个固定时间的毫秒数表示的,这个点就是所谓的纪元–epoch,它是UTC时间1970年1月1日 00:00:00。UTC是Coordinated Universal Time的缩写,与大写熟悉的GMT-Greenwitch Mean Time/格林威治时间一样,是一种具有实际目的的科学标准时间。
类库设计者决定将保存时间与时间点命名分开。所以标准的Java类库分别包含了两个类:
一个是用来表示时间的Date类;另外一个是用来表示大家熟悉对的日历表示法GreorianCalendar类。
事实上,GreorianCalendar类扩展了一个更加通用的calendar类,这个类描述了日历的一般属性。理论上,可以通过扩展Calendar类来实现中国的阴历或者火星日历。
打印日历
package com.wht.demo;
import java.text.DateFormatSymbols;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;
public class CalendarTest {
public static void main(String[] args) {
// 设置日历的显示的地区(根据自己的需要写)
Locale.setDefault(Locale.CHINESE);
// GregorianCalendar是Calendar的子类
GregorianCalendar gc = new GregorianCalendar();
int today = gc.get(Calendar.DAY_OF_MONTH);
int month = gc.get(Calendar.MONTH);
// 设置月份的起始日期为1
gc.set(Calendar.DAY_OF_MONTH, 1);
// 获取一周中的第几天
int weekday = gc.get(Calendar.DAY_OF_WEEK);
// 获取一周中的第一天
int firstDayOfWeek = gc.getFirstDayOfWeek();
// 计算月份第一行的缩进数
int indent = 0;// 缩进数
while (weekday != firstDayOfWeek) {
indent++;
gc.add(Calendar.DAY_OF_MONTH, -1);// 日期减1
weekday = gc.get(Calendar.DAY_OF_WEEK);
}
// 打印星期名
String[] weekdayNames = new DateFormatSymbols().getShortWeekdays();
do {
System.out.printf("%8s", weekdayNames[weekday]);
gc.add(Calendar.DAY_OF_MONTH, 1);
weekday = gc.get(Calendar.DAY_OF_WEEK)