java笔记 -- GregorianCalendar和DateFormateSymbols 类方法

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();
}
}
上一篇:XML命名规则


下一篇:解决 MariaDB无密码就可以登录的问题