目录
前言
在计算机里面日历是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()一样