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();
    }
}
原文地址:https://www.cnblogs.com/qiezuimh/p/9712035.html