java.util.GregorianCalendar
- new GregorianCalendar()
构造一个日历对象, 用于表示默认地区,默认时区的当前时间.
- new GregorianCalendar(int year, int month, int day),
- new GregorianCalendar(int year, int month, int day, int hour, int minutes, int seconds)
year: 该日期所在的年份
month: 该日期所在的月份,以0位基准, 0表示1月.月份可以使用常量,例如:Calendar.DECEMBER
day: 该月份中的日期
hour: 小时(0到23之间)
minutes: 分钟(0到59之间)
seconds: 秒(0到59之间)
- int get(int field) 返回给定域的值
field参数:
Calendar.ERA, Calendar.YEAR, Calendar.MONTH, Calendar.WEEK_OF_YEAR, Calendar.WEEK_OF_MONTH,
Calendar.DAY_OF_YEAR, Calendar.DAY_OF_MONTH, Calendar.DAY_OF_WEEK, Calendar.DAY_OF_WEEK_IN_MONTH,
Calendar.AM_PM, Calendar.HOUR, Calendar.HOUR_OF_DAY, Calendar.MINUTE, Calendar.SECOND,
Calendar.MILLISECOND, Calendar.ZONE_OFFSET, Calendar.DST_OFFSET
- void set(int field, int value) 设置特定域的值
field参数: 参照get方法
value: 新值
- void set(int year, int month, int day),
- void set(int year, int month, int day, int hour, int minutes, int seconds)
将日期域与时间域设置为新值
- void add(int field, int amount) 对给定的时间域增加指定数量的时间.可以为负数.
field参数: 参照get方法
amount: 域被改变的数量
- int getFirstDayOfWeek
方法获取当前地区星期的起始日期(美国的星期第一天是Calendar.SUNDAY, 欧洲每个星期的第一天是星期一, 最后一天是星期日).
- void setTime(Date time)
将日历设置为指定时间点
- void getTime()
获得这个日历对象当前值所表达的时间点.
java.text.DateFormateSymbols
- String[] getShortWeekdays()
- String[] getShortMonths()
- String[] getWeekdays()
- String[] getMonths()
获取当前地区的星期几或月份的名称(数组).利用Calendar的星期和月份常量作为数组的索引值.
// CalendarTest .java public class CalendarTest { public static void main(String[] args) { // 构造一个当前日期对象 GregorianCalendar d = new GregorianCalendar(); int today = d.get(Calendar.DAY_OF_MONTH); int month = d.get(Calendar.MONTH); // System.out.println("today: " + today); // System.out.println("month: " + month); // 设置时间为本月开始日期 d.set(Calendar.DAY_OF_MONTH, 1); // 本月第一天是星期几, 2018/09, 此weekday为7,周六 int weekday = d.get(Calendar.DAY_OF_WEEK); // System.out.println("weekday: " + weekday); // 得到当地星期的起始日 int firstDayOfWeek = d.getFirstDayOfWeek(); // 1是周日?? // System.out.println("firstDayOfWeek: " + firstDayOfWeek); int indent = 0; while (weekday != firstDayOfWeek) { indent++; // 将日期对象减1, 直到一个星期的第一天为止 d.add(Calendar.DAY_OF_MONTH, -1); weekday = d.get(Calendar.DAY_OF_WEEK); // System.out.println("weekday"+ indent + ": " + weekday); } String[] weekdayNames = new DateFormatSymbols().getShortWeekdays(); // System.out.println("weekdayNames: " + Arrays.toString(weekdayNames)); // weekdayNames: [, 星期日, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六] do { System.out.printf("%4s", weekdayNames[weekday]); // 在weekdayNames数组中取值. d.add(Calendar.DAY_OF_MONTH, 1); weekday = d.get(Calendar.DAY_OF_WEEK); } while (weekday != firstDayOfWeek); // 满足此条件就继续. System.out.println(); for (int i = 1; i<= indent; i++) System.out.print(" "); // 打印缩进位置 d.set(Calendar.DAY_OF_MONTH, 1); do { // 开始打印日期 int day = d.get(Calendar.DAY_OF_MONTH); System.out.printf("%3d", day); // 当前日期后面打印* if (day == today) System.out.print("*"); else System.out.print(" "); // 打印日期, 每到一个当地星期其实日, 则换行 d.add(Calendar.DAY_OF_MONTH, 1); weekday = d.get(Calendar.DAY_OF_WEEK); // 此处容易混的是: 上面已经先打印出了符合周六的日期, 然后+1天,判断相等之后才会进入下一个循环继续打印周日(起始日),所以是没有问题的. if (weekday == firstDayOfWeek) System.out.println(); } while (d.get(Calendar.MONTH) == month); // 打印尾行线(如果需要) if (weekday !=firstDayOfWeek) System.out.println(); } }