Java中Calendar类学习笔记(抽象类)

Calendar类


Calendar提供了获取或设置各种日历字段的方法。

Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEARMONTHDAY_OF_MONTHHOUR日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

该类还为实现包范围外的具体日历系统提供了其他字段和方法。这些字段和方法被定义为 protected

与其他语言环境敏感类一样,Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。CalendargetInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化:

构造方法

因为Calendar是一个抽象类,且构造函数是protected,故不能直接使用Calendar c=new Calendar()来构造一个Calendar对象,但是API中提供了getInstance方法用来创建对象,故创建对象的一般方法为

Calendar  cal= Calendar.getInstance();

从Calendar.getInstance() 中所获得的实例其实就是一个 “GreogrianCalendar” 对象

GreogrianCalendar就是Calendar的子类,他实现了Calendar里面的抽象方法。过父类的引用来指向子类的实例来间接地实现父类的实例化。同时,使用getInstance()有诸多好处:

  1. new 一定要生成一个新对象,分配内存;getInstance()则不一定要再次创建,它可以把一个已存在的引用给你使用,这在效能上优于new;

  2. new创建后只能当次使用,而getInstance()可以跨栈区域使用,或者远程跨区域使用。所以getInstance()通常是创建static静态实例方法的。

常用函数

接下来提供一些常用的方法

方法名功能
public static Calendar getInstance()使用默认时区和语言环境获得一个日历。
public final void set(int year,
int month,
int date,
int hourOfDay,
int minute,
int second)
设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值
public int get(int field)返回给定日历字段的值。
public final void setTime(Date date)使用给定的 Date 设置此 Calendar 的时间。
public abstract void add(int field, int amount)根据日历的规则,为给定的日历字段添加或减去指定的时间量。
public long getTimeInMillis()返回此 Calendar 的时间值,以毫秒为单位

上述只是提供了一些常用方法,其他方法查询API即可得知,接下来提供一个测试样例代码对一些常用函数进行使用:

public static void main(String[] args) {

        // 1. 创建 Calendar 类
        Calendar calendar = Calendar.getInstance();
        // 获取格式化时间
        System.out.println(calendar.getTime().toString());
        // 获取毫秒值,从1970年至今
        System.out.println(calendar.getTimeInMillis());

        // 2. 获取时间信息
        // 获取 年
        int year = calendar.get(Calendar.YEAR);
        // 获取 月     获取的数字比真实月份小1
        int month = calendar.get(Calendar.MONTH);
        // 获取 日
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        // 获取 小时
        int hour_12 = calendar.get(Calendar.HOUR); // 12小时进制
        int hour_24 = calendar.get(Calendar.HOUR_OF_DAY);   // 24小时进制
        // 获取 分钟
        int minute = calendar.get(Calendar.MINUTE);
        // 获取 秒
        int second = calendar. get(Calendar.SECOND);

        System.out.println(year + "年" + (month+1) + "月" + day + "日" +
                            hour_12 + ":" + minute + ":" + second);

        // 修改时间
        Calendar calendar2 = Calendar.getInstance();
        calendar2.set(Calendar.MONTH, 5);
        System.out.println(calendar2.getTime().toString());

        // 4. add方法修改时间
        calendar2.add(Calendar.HOUR, -1);   // 往前推一个小时
        System.out.println(calendar2.getTime().toString());

        // 5. 补充方法
        int max = calendar2.getActualMaximum(Calendar.DAY_OF_MONTH); // 当前月的最大日 30号
        int min = calendar2.getActualMinimum(Calendar.DAY_OF_MONTH); // 当前月的最小日 1号
        System.out.println(max);
        System.out.println(min);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值