概念
java.util.Calendar 是⽇历类,在Date后出现,替换掉了许多Date的⽅法。该类将所有可能⽤
到的时间信息封装为静态成员变量,⽅便获取。⽇历类就是⽅便获取各个时间属性的
获取⽅式
Calendar为抽象类,Calendar类在创建对象时并⾮直接创建,⽽是通过静态⽅
法创建,返回⼦类对象,如下:
Calendar静态⽅法
public static Calendar getInstance() :使⽤默认时区和语⾔环境获得⼀个⽇历
例如
import java.util.Calendar;
public class Demo06CalendarInit {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
}
}
常⽤⽅法
1.public int get(int field) :返回给定⽇历字段的值。
2.public void set(int field, int value) :将给定的⽇历字段设置为给定值。
3.public abstract void add(int field, int amount) :根据⽇历的规则,为给定的⽇历
字段添加或减去指定的时间量。
4.public Date getTime() :返回⼀个表示此Calendar时间值(从历元到现在的毫秒偏移
量)的Date对象
Calendar类中提供很多成员常量,代表给定的⽇历字段:
字段值 | 含义 |
---|---|
YEAR | 年 |
MONTH | ⽉(从0开始,可以+1使⽤) |
DAY_OF_MONTH / DATE | ⽉中的天(⼏号) |
HOUR | 时(12⼩时制) |
HOUR_OF_DAY | 时(24⼩时制) |
MINUTE | 分 |
SECOND | 秒 |
DAY_OF_WEEK | 周中的天(周⼏,周⽇为1,可以-1使⽤) |
get/set⽅法
get⽅法⽤来获取指定字段的值,set⽅法⽤来设置指定字段的值,代码使⽤演示:
public class CalendarUtil{
public static void mian(String arg[]){
//创建Calendar 对象
Calendar cal=Calendar.getInstance();
//设置年
int year=cal.get(Calendar.YEAR);
//设置月
int month=cal.get(Calendar.MONTH)+1;
//设置日
int dayOfMonth=cal.get(Calendar.DAY_OF_MONTH);
System.out.print(year + "年" + month + "⽉" + dayOfMonth + "⽇");
}
}
import java.util.Calendar;
public class DemoCalendarMethod {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
//设置月
int month=cal.get(Calendar.MONTH)+1;
//设置日
int dayOfMonth=cal.get(Calendar.DAY_OF_MONTH);
//设置年份为2020年
cal.set(Calendar.YEAR, 2020);
int year=cal.get(Calendar.YEAR);
System.out.print(year + "年" + month + "⽉" + dayOfMonth + "⽇");
}
}
add⽅法
add方法可以对指定日历字段的值进行加减操作,如果第二个参数为正数则加上偏移量,如果为负数则减去偏移量
例如
import java.util.Calendar;
public class DemoCalendarMethod {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
//设置月
int month=cal.get(Calendar.MONTH)+1;
//设置日
int dayOfMonth=cal.get(Calendar.DAY_OF_MONTH);
//设置年
int year=cal.get(Calendar.YEAR);
System.out.print(year + "年" + month + "⽉" + dayOfMonth + "⽇");
System.out.println();
//2021年7月26
//使用add方法
cal.add(Calendar.DAY_OF_MONTH,2);
cal.add(Calendar.YEAR,-3);
dayOfMonth=cal.get(Calendar.DAY_OF_MONTH);
year=cal.get(Calendar.YEAR);
System.out.print(year + "年" + month + "⽉" + dayOfMonth + "⽇");
//2018年7月26日
}
}
getTime⽅法
Calendar中的getTime⽅法并不是获取毫秒时刻,⽽是拿到对应的Date对象。
import java.util.Calendar;
import java.util.Date;
public class Demo09CalendarMethod {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
// Calendar --->Date
Date date = cal.getTime();
System.out.println(date); // Tue Jul 27 00:00:11 CST 2021
//Date --> Calendar
cal.setTime(date);
System.out.println(cal);
}
}
练习
输入一个生产日期格式"yyyy-MM-dd",再输入一个数字(保质期的天数)。
然后经过计算输出促销日期,促销日期为:该商品过期日前2周的周三
public class Demo {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
//输入一个生产日期格式"yyyy-MM-dd",再输入一个数字(保质期的天数)。
Calendar cal=Calendar.getInstance();
Scanner sc = new Scanner(System.in);
System.out.println("输入一个生产日期格式yyyy-MM-dd");
String str = sc.nextLine();
System.out.println("输入保质期天数");
int num = sc.nextInt();
//parse() String ->Date
Date date=sdf.parse(str);
cal.setTime(date);
cal.add(Calendar.DATE,num-14);
cal.set(Calendar.DAY_OF_WEEK,Calendar.WEDNESDAY);
Date date1=cal.getTime();
System.out.println(date1);
}
}