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();
}
}