java.util.Calendar类

本文介绍了Java中的Calendar类,它是处理日期的核心类。文章详细讲解了如何创建Calendar对象,包括getInstance方法的使用。此外,还阐述了Calendar的静态常量和一系列静态方法,如get、set、add、getTime、getActualMaximum以及getActualMinimum,通过实例展示了这些方法的用法和返回值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

在计算机里面日历是0表示1月份,1-12月份是0-11表示
一周内的天数这是从星期日开始算,所以1是星期日,以此类推

一、简述

Calendar类是一个抽象类,可以为在某一特定时刻和一组之间的转换的方法calendar fields如YEAR , MONTH , DAY_OF_MONTH , HOUR ,等等,以及用于操纵该日历字段,如获取的日期下个星期,是java日期处理的核心类之一。

1.1、创建对象

因为Calendar类是一个抽象类,我们通过getInstance创建一个对象
在这里插入图片描述

1.2、创建对象的流程

我们先进入源码private static Calendar createCalendar(TimeZone zone,Locale aLocale)

private static Calendar createCalendar(TimeZone zone,
                                           Locale aLocale)
    {
        CalendarProvider provider =
            LocaleProviderAdapter.getAdapter(CalendarProvider.class, aLocale)
                                 .getCalendarProvider();
        if (provider != null) {
            try {
                return provider.getInstance(zone, aLocale);
            } catch (IllegalArgumentException iae) {
                // fall back to the default instantiation
            }
        }

        Calendar cal = null;

        if (aLocale.hasExtensions()) {
            String caltype = aLocale.getUnicodeLocaleType("ca");
            if (caltype != null) {
                switch (caltype) {
                case "buddhist":	//泰国的佛历
                cal = new BuddhistCalendar(zone, aLocale);
                    break;
                case "japanese":	//日本帝国历
                    cal = new JapaneseImperialCalendar(zone, aLocale);
                    break;
                case "gregory":		//其他地区(这是公历)
                    cal = new GregorianCalendar(zone, aLocale);
                    break;
                }
            }
        }
        if (cal == null) {
            // If no known calendar type is explicitly specified,
            // perform the traditional way to create a Calendar:
            // create a BuddhistCalendar for th_TH locale,
            // a JapaneseImperialCalendar for ja_JP_JP locale, or
            // a GregorianCalendar for any other locales.
            // NOTE: The language, country and variant strings are interned.
            if (aLocale.getLanguage() == "th" && aLocale.getCountry() == "TH") {
                cal = new BuddhistCalendar(zone, aLocale);
            } else if (aLocale.getVariant() == "JP" && aLocale.getLanguage() == "ja"
                       && aLocale.getCountry() == "JP") {
                cal = new JapaneseImperialCalendar(zone, aLocale);
            } else {
                cal = new GregorianCalendar(zone, aLocale);
            }
        }
        return cal;
    }

虽然说Calendar是抽象类不能直接去new,但Calendar里提供了getInstance()方法会返回一个Calendar实现好的子类对象,那么这个子类对象,会根据以上不同的地区所编写的3种不同的子类对象

所以我们可以通过Calendar的静态方法getInstance()来获取对象

Calender cl = Calender.getInstance();

二、静态常量

//年份
Calendar.YEAR            // 1
 
//月份
Calendar.MONTH           // 2
 
//当前时间为多少号(日历式的多少号)
Calendar.DATE            // 5
 
//小时(12小时制)
Calendar.HOUR            // 10
 
//小时(24小时制)
Calendar.HOUR_OF_DAY     // 11
 
//分钟数
Calendar.MINUTE          // 12
 
//秒数
Calendar.SECOND          // 13
 
//毫秒
Calendar.MILLISECOND     // 14
//当前时间是所在当前月的第几个星期(日历式的第几周)
Calendar.WEEK_OF_MONTH //4
 
//当前时间是所在当前年的第几个星期
Calendar.WEEK_OF_YEAR  //3
 
//当前时间是所在当前月的第几个星期,以月份天数为标准,一个月的1号为第一周,8号为第二周
Calendar.DAY_OF_WEEK_IN_MONTH //8
//一周7天当中,当前时间是星期几
Calendar.DAY_OF_WEEK          //7
 
//指示一年中的第几天
Calendar.DAY_OF_YEAR          //6
 
//指示一月中的第几天,结果等同于Calendar.DATE
Calendar.DAY_OF_MONTH         //5

//周天
Calendar.SUNDAY     //1
//周一
Calendar.MONDAY     //2
//周二
Calendar.TUESDAY    //3
//周三
Calendar.WEDNESDAY  //4
//周四
Calendar.THURSDAY   //5
//周五
Calendar.FRIDAY     //6
//周六
Calendar.SATURDAY   //7

三、静态方法

3.1、get方法

在这里插入图片描述
返回的是int类型,get()里的参数是传的是第二点说所的静态常量,也可以直接输入数字,但是为了程序的可读性以及见名知意,建议还是使用常量名,如Calendar.YEAR

以下的就是get方法存储的参数,参数都是存储在这个数组里面的,所以在get方法传了一个参数,其实等于传了个下标给下面的数组调用
在这里插入图片描述

protected int   fields[];

在这里插入图片描述

举例:

public static void main(String[] args) {
        Calendar cl = Calendar.getInstance();
        int year = cl.get(Calendar.YEAR);//获取的年份
        int day = cl.get(Calendar.DAY_OF_YEAR);//获取的是今天是今年的第几天
        System.out.println(year);
        System.out.println(day);
    }

3.2、set方法

在这里插入图片描述

语法:

set(int field, int value);
set(int year, int month, int day);
set(int year, int month, int day, int hour, int minute);
set(int year, int month, int day, int hour, int minute, int second);
public static void main(String[] args) {
        Calendar cl = Calendar.getInstance();
        cl.set(Calendar.YEAR,2019);//设置年份为2019
        int year = cl.get(Calendar.YEAR);//获取的年
        System.out.println(year);
    }

3.3、add方法

在这里插入图片描述

public static void main(String[] args) {
        Calendar cl = Calendar.getInstance();
        cl.add(Calendar.YEAR,1);//当前的年份加1
        int year = cl.get(Calendar.YEAR);//获取的年
        System.out.println(year);
    }

3.4、getTime方法

在这里插入图片描述
getTime()方法获取的不是时间戳而是日历时间表示的Date的对象

public static void main(String[] args) {
        Calendar cl = Calendar.getInstance();
        Date d = cl.getTime();
        System.out.println(d);
    }

输出结果
在这里插入图片描述

3.5、getActualMaximum方法

返回指定日历字段可能拥有的实际最大值
在这里插入图片描述

public static void main(String[] args) {
        Calendar cl = Calendar.getInstance();
        int m = cl.getActualMaximum(Calendar.DAY_OF_MONTH);
        System.out.println(m);
    }

3.6、getActualMinimum​方法

返回指定日历字段可能拥有的实际最小值
在这里插入图片描述

用法跟getActualMaximun()一样


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值