背景介绍
日历对我的生活而言是一个容易被忽视,而又十分重要的东西。在Android中,我们也常常需要操作日历去实现一些需求。比如根据日期获取对应数据,或者承载了一些需求的自定义日历。为了方便对日期的操作,诞生了Calendar 类。这大大简化了我们的计算。
事实上,我们只需要知道如何操作Calendar就行了。本篇我们将一起来了解下Calendar,并且实现一个自定义日历。
方便的Calendar类
Calendar是干什么的?
The Calendar class is an abstract class that provides methods for converting between a specific instant in time and a set of calendar fields such as YEAR, MONTH, DAY_OF_MONTH, HOUR, and so on, and for manipulating the calendar fields, such as getting the date of the next week.
上面是Android文档中对Calendar是什么的简单介绍。大概的意思就是说,Calendar是一个抽象类。它提供了一些用于一个具体时间和Calendar的字段(比如,YEAR、MONTH、DAY_OF_MONTH、HOUR等)互相转换的方法,以及对Calendar的字段的操作方法(比如,获取下一周的日期)。
综上所述,Calendar就是一个操作日历的工具类。
Calendar的使用
获得一个Calendar实例
Calendar calendar = Calendar.getInstance(); //这个方法获取到的是默认的Calendar实例。
//一般使用默认的就好,它会根据app运行的时区、语言环境自动创建相应的Calendar实例。
Calendar calendar = Calendar.getInstance(Locale.CHINA); //根据Locale来获取相应的Calendar实例。
Calendar calendar = Calendar.getInstance(TimeZone.getDefaultRef(), Locale.CHINA);
//根据TimeZone和Locale来获取相应的Calendar实例。
//这些方法最终调用的都是createCalendar()
private static Calendar createCalendar(TimeZone zone, Locale aLocale) {
return new GregorianCalendar(zone, aLocale); //Android中使用了GregorianCalendar。
//注意这里每次都是new一个新的Calendar实例。
}
挑几个方法特别说明下
set(f, value)
- 调用该方法可以把Calendar的某个字段f的值设置为指定值value。
- 这里需要注意:DAY_OF_MONTH字段是从1开始,如果设置0,表示上个月的最后一天;MONTH字段是从0开始,如果设置12,表示下一年的第一个月。
- set()方法设置后,仅仅是改变了Calendar的指定字段的值,但是Calendar表示的日期并没有重新计算。Calendar将会在下次调用get()、getTime()、getTime