Calendar是一个抽象类,主要用来操作日历时间字段。在Java.util.Calendar包中,Calendar在开发中基本都会使用得到,这里对经常使用到的做个总结,也可能有遗漏,遇到再补,慢慢完善。
常用的方法
abstract void add(int field, int amount) | 此方法添加或减去指定的时间量,以给定日历字段,基于日历的规则。 |
boolean after(Object obj) | 这个方法返回当前日历是否代表在指定Object表示的时间之后的时间。 |
boolean before(Object when) | 这个方法返回当前日历是否代表在指定Object表示的时间之前的时间。 |
void clear() | 此方法设置此Calendar的所有日历字段值和时间值(毫秒从历元至偏移量)未定义。 |
Object clone() | 此方法创建并返回此对象的一个副本。 |
int compareTo(Calendar anotherCalendar) | 这个方法比较两个Calendar对象表示的时间值(从历元至毫秒偏移量)。 |
boolean equals(Object obj) | 这个方法使日历比较指定的对象。 |
int get(int field) | 此方法返回给定日历字段的值。 |
int getActualMaximum(int field) | 此方法返回指定日历字段可能拥有的最大值,鉴于此Calendar时间值。 |
int getActualMinimum(int field) | 此方法返回指定日历字段可能拥有的最小值,鉴于此Calendar时间值。 |
static Calendar getInstance() | 使用默认时区和语言环境这种方法获得一个日历。 |
static Calendar getInstance(Locale aLocale) | 使用默认时区和指定的区域设置此方法获取一个日历。 |
static Calendar getInstance(TimeZone zone) | 使用指定的时区和默认语言环境这种方法得到一个日历。 |
static Calendar getInstance(TimeZone zone, Locale aLocale) | 这种方法得到一个日历指定的时区和语言环境。 |
abstract int getMaximum(int field) | 此方法返回此Calendar实例给定日历字段的最大值。 |
abstract int getMinimum(int field) | 此方法返回此Calendar实例给定日历字段的最小值。 |
Date getTime() | 此方法返回表示此Calendar的时间值(从历元至“毫秒偏移量)的Date对象。 |
long getTimeInMillis() | 该方法以毫秒为单位返回此Calendar的时间值。 |
abstract void roll(int field, boolean up) | 此方法添加或减去(上/下)的时候一个单元在给定的时间字段不更改更大的字段。 |
void roll(int field, int amount) | 此方法将指定的(签署)金额至指定日历字段不更改更大的字段。 |
void set(int field, int value) | 此方法设置给定日历字段为给定值。 |
void set(int year, int month, int date) | 此方法设置为日历字段的值 YEAR, MONTH, and DAY_OF_MONTH.. |
void set(int year, int month, int date, int hourOfDay, int minute) | 此方法设置为日历字段的值YEAR, MONTH, DAY_OF_MONTH, HOUR_OF_DAY, 和 MINUTE. |
void set(int year, int month, int date, int hourOfDay, int minute, int second) | 此方法设置的字段的值YEAR, MONTH, DAY_OF_MONTH, HOUR, MINUTE, 和SECOND. |
常用的场景
1,获取今天或者之后多少天的日期
- Calendar calendar=Calendar.getInstance();
- @Test
- public void getTest(){
- calendar.setTime(new Date());
- /*获取今天的日期*/
- System.out.println("今天的日期是:"+calendar.get(Calendar.DAY_OF_MONTH));
- /*获取十天之后的日期*/
- calendar.clear();//避免继承当前系统的时间
- calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH)+10);
- System.out.println("十天之后的日期是:"+calendar.get(Calendar.DAY_OF_MONTH));
- }
- /*计算某一个月的天数是多少*/
- public void maxDay(int year,int month){
- calendar.clear();
- calendar.set(Calendar.YEAR, year);
- calendar.set(Calendar.MONTH,month-1);//默认1月为0月
- int day = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
- System.out.println(year+"年"+month+"月"+"的最大天数是:"+day);
- }
- @Test
- public void maxDayTest(){
- maxDay(2017,9);
- }
3,计算某一天是该年或该月的第几个星期
- public void weekNum(int year,int month,int day){
- calendar.clear();
- calendar.set(Calendar.YEAR, year);
- calendar.set(Calendar.MONTH,month-1);
- calendar.set(Calendar.DAY_OF_MONTH, day);
- /*计算某一天是该年的第几个星期*/
- int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);
- System.out.println(year+"年"+month+"月"+day+"日是这年中的第"+weekOfYear+"个星期");
- /*计算某一天是该月的第几个星期*/
- int weekOfMonth= calendar.get(Calendar.WEEK_OF_MONTH);
- System.out.println(year+"年"+month+"月"+day+"日是这个月中的第"+weekOfMonth+"个星期");
- }
- @Test
- public void weekNumTest(){
- weekNum(2017, 7, 8);
- }
4,计算一年中的第几星期是几号
- public void dayNum(int year,int week){
- calendar.clear();
- SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
- calendar.set(Calendar.YEAR, year);
- calendar.set(Calendar.WEEK_OF_YEAR, week);
- calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
- System.out.println(df.format(calendar.getTime()));
- }
- @Test
- public void dayNumTest(){
- dayNum(2017,28);
- }
- public void add(int year,int month,int day,int num){
- calendar.clear();
- SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
- calendar.set(Calendar.YEAR, year);
- calendar.set(Calendar.MONTH, month-1);
- calendar.set(Calendar.DAY_OF_MONTH, day);
- Date date=calendar.getTime();
- calendar.add(Calendar.DATE, num);
- date=calendar.getTime();
- System.out.println(df.format(date));
- }
- /*使用场景比如,发找回密码邮件,设置一天后过期*/
- @Test
- public void addTest(){
- add(2017,7,10,1);
- }
- public void roll(int year,int month,int day,int num){
- calendar.clear();
- SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
- calendar.set(Calendar.YEAR, year);
- calendar.set(Calendar.MONTH, month-1);
- calendar.set(Calendar.DAY_OF_MONTH, day);
- Date date=calendar.getTime();
- calendar.roll(Calendar.DATE, num);
- date=calendar.getTime();
- System.out.println(df.format(date));
- }
- @Test
- public void rollTest(){
- roll(2017,7,31,5);
- }
6,计算两个任意时间中间相隔的天数
- public int getDaysBetween (Calendar day1, Calendar day2){
- if (day1.after(day2)){
- Calendar swap = day1;
- day1 = day2;
- day2 = swap;
- }
- int days = day2.get(Calendar.DAY_OF_YEAR) - day1.get(Calendar.DAY_OF_YEAR);
- int y2 = day2.get(Calendar.YEAR);
- if (day1.get(Calendar.YEAR) != y2){
- day1 = (Calendar) day1.clone();
- do{
- days += day1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到当年的实际天数
- day1.add(Calendar.YEAR, 1);
- } while (day1.get(Calendar.YEAR) != y2);
- }
- return days;
- }
- @Test
- public void getDaysBetweenTest(){
- Calendar calendar1=Calendar.getInstance();
- Calendar calendar2=Calendar.getInstance();
- calendar1.set(2017,07,30);
- calendar2.set(2017,07,03);
- int days=getDaysBetween(calendar1, calendar2);
- System.out.println("相隔"+days+"天");
- }