Calender类
-
Calendar提供了获取或设置各种日历字段的方法
-
构造方法
- protected Calendar( ):由于修饰符是protected,所以无法直接创建对象
-
其他方法
方法名 | 说明 |
---|---|
static Calendar getlnstance | 使用时默认时区和区域获取日历 |
void set(int year,int month,int date,int hourofday,int minute,int second) | 设置日历的年、月、日、时、分、秒 |
int get(int field) | 返回给定日历字段的值。字段比如年、月、日等 |
void setTime(Date date) | 用给定的Date设置此日历的时间。Date-Calendar |
Date getTime() | 返回一个Date表示此日历的时间。Calendar-Date |
void add(int field,int amount) | 按照日历的规则,给指定字段添加或减少时间量(加一个负数即为减) |
long getTimelnMillies() | 毫秒为单位返回该日历的时间值 |
- 实例
public class Demo01 {
public static void main(String[] args) {
//创建Calendar对象
Calendar calendar = new Calendar();
}
}
这样的形式是错误的,会抛出异常
java: java.util.Calendar是抽象的; 无法实例化
不能用new去创建Calendar对象
正确应为
public class Demo01 {
public static void main(String[] args) {
//创建Calendar对象
Calendar calendar=Calendar.getInstance();
}
}
调用getInstance()方法来创建对象
在打印日期时,尽量避免使用toString()方法,因为打印的东西过多
public class Demo01 {
public static void main(String[] args) {
//创建Calendar对象
Calendar calendar=Calendar.getInstance();
System.out.println(calendar.toString());
}
}
这样的输出结果会显得冗余
java.util.GregorianCalendar[time=1628301257826,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2021,MONTH=7,WEEK_OF_YEAR=32,WEEK_OF_MONTH=1,DAY_OF_MONTH=7,DAY_OF_YEAR=219,DAY_OF_WEEK=7,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=9,HOUR_OF_DAY=9,MINUTE=54,SECOND=17,MILLISECOND=826,ZONE_OFFSET=28800000,DST_OFFSET=0]
可以看出,在第三行给出了日期,但极其不好找,故不推荐使用
合适的做法如下
public class Demo01 {
public static void main(String[] args) {
//创建Calendar对象
Calendar calendar=Calendar.getInstance();
System.out.println(calendar.getTime().toLocaleString());
}
}
此时的输出结果为
2021-8-7 10:05:00
如果我们要打印出当前 年月日
//2.获取时间信息
//获取年
int year=calendar.get(Calendar.YEAR);//get(int field),说明里面是需要一个整数的,Calendar类中提供了很多静态常量。如“年”:YEAR=1,这时候你既可以写“YEAR”来获取年,也可以写“1”,二者作用相同,但前者易读,后者简洁
//月
int month=calendar.get(Calendar.MONTH);//有一个需要注意的点:月份在java中是从0-11。0即表示一月,11表示12月,因此在打印月份时需要月份+1
//日
int day=calendar.get(Calendar.DAY_OF_MONTH);//DAY_OF_MONTH可以换Date
//小时
int hour=calendar.get(Calendar.HOUR);//HOUR:12小时时制;HOUR_OF_DAY:24小时时制
//分钟
int minute= calendar.get(Calendar.MINUTE);
//秒
int second=calendar.get(Calendar.SECOND);
//3.打印时间信息
System.out.println(year+"年"+(month+1)+"月"+day+"日"+hour+":"+minute+":"+second);
这样就可以获取并打印出当前时间
2021-8-9 9:45:31
2021年8月9日9:45:31
不仅能打印出当前时间,我们也可以对时间进行修改
//4.修改时间信息
Calendar calendar2=Calendar.getInstance();
calendar2.set(Calendar.DAY_OF_MONTH,8);//今天是8月9日,如果我想修改为昨天的日期,那么将“日”修改为8即可
System.out.println(calendar2.getTime().toLocaleString());
修改之后会变成
2021-8-8 9:45:31
如果我们觉得修改比较麻烦,那么可以试试对时间直接进行添加或减少
//5.可使用add方法对时间进行添加或减少
calendar2.add(Calendar.HOUR,1);//这句的意思是给小时数上加一
System.out.println(calendar2.getTime().toLocaleString());
输出为
2021-8-8 17:27:38
再还有一些补充的方法
//补充方法
int max=calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);//打印出来这个月的最大值
int min=calendar2.getActualMinimum(Calendar.DAY_OF_MONTH);//打印出来这个月的最小值
System.out.println(max);
System.out.println(min);
输出为
31
1
完整代码为
package com.commonClass.calendarClass;
import java.util.Calendar;
public class Demo01 {
public static void main(String[] args) {
//1.创建Calendar对象
Calendar calendar=Calendar.getInstance();//Calendar对象是“受保护的”,所以是无法用new来创建对象的
System.out.println(calendar.getTime().toLocaleString());
//2.获取时间信息
//获取年
int year=calendar.get(Calendar.YEAR);//get(int field),说明里面是需要一个整数的,Calendar类中提供了很多静态常量。如“年”:YEAR=1,这时候你既可以写“YEAR”来获取年,也可以写“1”,二者作用相同,但前者易读,后者简洁
//月
int month=calendar.get(Calendar.MONTH);//有一个需要注意的点:月份在java中是从0-11。0即表示一月,11表示12月,因此在打印月份时需要月份+1
//日
int day=calendar.get(Calendar.DAY_OF_MONTH);//DAY_OF_MONTH可以换Date
//小时
int hour=calendar.get(Calendar.HOUR);//HOUR:12小时时制;HOUR_OF_DAY:24小时时制
//分钟
int minute= calendar.get(Calendar.MINUTE);
//秒
int second=calendar.get(Calendar.SECOND);
//3.打印时间信息
System.out.println(year+"年"+(month+1)+"月"+day+"日"+hour+":"+minute+":"+second);
//4.修改时间信息
Calendar calendar2=Calendar.getInstance();
calendar2.set(Calendar.DAY_OF_MONTH,8);//今天是8月9日,如果我想修改为昨天的日期,那么将“日”修改为8即可
System.out.println(calendar2.getTime().toLocaleString());
//5.可使用add方法对时间进行添加或减少
calendar2.add(Calendar.HOUR,1);//这句的意思是给小时数上加一
System.out.println(calendar2.getTime().toLocaleString());
//补充方法
int max=calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);//打印出来这个月的最大值
int min=calendar2.getActualMinimum(Calendar.DAY_OF_MONTH);//打印出来这个月的最小值
System.out.println(max);
System.out.println(min);
}
}
完整输出结果为
2021-8-9 16:27:38
2021年8月9日4:27:38
2021-8-8 16:27:38
2021-8-8 17:27:38
31
1