java Calendar

介绍

java.util.Date 类的很多方法都被 废弃 了,由 Calendar 取代

Calendar是一个抽象类,用于表示日历,是所有日历类的模板,Java本身提供了一个GregorianCalendar类,它代表了通常说的公历。

Calendar是一个抽象类,所以不能使用构造器来创建Calendar对象。但提供了几个静态的 getInstance() 方法来获取Calendar对象,这些方法根据 TimeZone,Locale 类来获取特定的 Calendar ,如果不指定 TimeZone 和 Locale,则使用默认的 TimeZone 和 Locale 来创建 Calendar

Calendar 和 Date

都是表示日期的工具类,可以自由转换:

Calendar 转 Date:

Calendar calendar = Calendar.getInstance();
//从calendar对象中取出Date对象
Date date = calendar.getTime();

Date 转 Calendar:

//通过Date对象获得对应的Calendar对象
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(date);

获取年月日时分秒

通过 get() 方法,搭配 静态常量 使用

例子

// 使用默认时区和语言环境获得一个对象
Calendar cal = Calendar.getInstance();

System.out.println("年:" + cal.get(Calendar.YEAR));

// 注意月份从0开始,所以取月份要+1
System.out.println("月:" + (cal.get(Calendar.MONTH) + 1));
System.out.println("日:" + cal.get(Calendar.DAY_OF_MONTH));
System.out.println("时:" + cal.get(Calendar.HOUR_OF_DAY));
System.out.println("分:" + cal.get(Calendar.MINUTE));
System.out.println("秒:" + cal.get(Calendar.SECOND));

注意月份

月份从0开始,所以取月份要+1

System.out.println("月:" + (cal.get(Calendar.MONTH) + 1));

注意星期几

System.out.println("星期:" + (calendar.get(Calendar.DAY_OF_WEEK) -1));

返回值:1--7,意思是:

1 表示星期日
2 表示星期一
3 表示星期二
4 表示星期三
….
7 表示星期六

获取某年2月最后一天

Calendar calendar=Calendar.getInstance(); //获得实例Calendar对象

calendar.set(Calendar.YEAR, 2021));

calendar.set(Calendar.MONTH,1);
//获得该月的最后一天
int end=calendar.getActualMaximum(calendar.DAY_OF_MONTH);

设置时间

通过以下方法设置时间:

  • set(int field, int value)
  • set(int year, int month, int date)
  • set(int year, int month, int date, int hourOfDay, int minute)
  • set(int year, int month, int date, int hourOfDay, int minute, int second

例子

月份的下标从 0 开始,设置时同样需要注意,比如设置:2018-02-15 23:59:59

Calendar cal = Calendar.getInstance();
// 一次设置年月日时分秒,由于月份下标从0开始赋值月份要-1
// cal.set(year, month, date, hourOfDay, minute, second);
cal.set(2018, 1, 15, 23, 59, 59);

或者

// 由于月份下标从0开始赋值月份要-1
cal.set(Calendar.YEAR, 2018);
cal.set(Calendar.MONTH, Calendar.FEBRUARY);
cal.set(Calendar.DAY_OF_MONTH, 15);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
System.out.println(cal.getTime());

时间计算

通过下面方法实现计算

  • add(int field, int amount)
    • field 静态常量
    • amount 正数表示未来的时间,负数表示之前的时间

例子

增加1秒

Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime());
cal.add(Calendar.SECOND, 1);//增加1秒
System.out.println(cal.getTime());

增加月份
超出最大值时会自动调整成正确的日期:

Calendar cal = Calendar.getInstance();
cal.set(2020, 1, 31, 8, 0, 0);
System.out.println(cal.getTime());
cal.add(Calendar.MONTH, 1);
System.out.println(cal.getTime());

原文出处:/show_1IX1N4dll9ww.html