Calendar是一个日历类
首先, 从类名定义可以看出它实现了Serializable, Cloneable, Comparable接口。
And, 实现了Comparable就意味着可以使用Arrays.sort的方法对多个Calendar对象进行排序。
class Calendar implements Serializable, Cloneable, Comparable<Calendar>
Let’s see how to use it !
创建实例
public static Calendar getInstance()
获取当前时间
Calendar calendar = Calendar.getInstance();
System.out.println("当前时间: " + calendar.getTime()); // 返回Date对象
输出:
当前时间: Sun Sep 01 13:22:33 CST 2019
获取年/月/日/时/分/秒/星期
public int get(int field)
Calendar中设置不同的整型常量来代表不同的时间单位。例如:
Calendar.YEAR
Calendar.MONTH
Calendar.DATE
…
示例
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1; //Calendar使用0表示一月,要表示当前月得+1
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
int week = calendar.get(Calendar.DAY_OF_WEEK); //星期日表示本周第一天
System.out.println("当前时间: " + year + "年" + month + "月" + day + "日" + hour + "点" + minute + "分" + second + "秒" + "本周第" + week + "天");
输出:
2019年9月1日13点29分3秒本周第1天
注意:
在Calendar中
- 月份从0开始算起 !!!
- 星期天为一周的第一天
设置时间
使用Calendar常量进行设置
public void set(int field, int value)
例子
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.get(Calendar.YEAR));
calendar.set(Calendar.YEAR, 2000);
System.out.println(calendar.get(Calendar.YEAR));
输出:
2019
2000
使用具体的时间进行设置
public final void setTime(Date date)
public final void set(int year, int month, int date)
public final void set(int year, int month, int date, int hourOfDay, int minute)
public final void set(int year, int month, int date, int hourOfDay, int minute,int second)
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime().toString());
calendar.set(2019, 9, 10);
System.out.println(calendar.getTime().toString());
输出:
Sun Sep 01 14:00:23 CST 2019
Thu Oct 10 14:00:23 CST 2019
时间的计算
如果我想将时间往前/往后推移
public void add(int field, int amount);
栗子:
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.get(Calendar.YEAR));
calendar.add(Calendar.YEAR, 5);
System.out.println(calendar.get(Calendar.YEAR));
输出:
2019
2024
See? 它还有个相似的方法roll, 但是还是推荐使用add.
——>Calendar中add函数和roll函数的用法及区别
我从别处copy过来的一个例子:
// 假设求6月的最后一天
int currentMonth = 6; //7月
// 先求出7月份的第一天
calendar.set(calendar.get(Calendar.YEAR), currentMonth, 1);
// 往后推移一天
calendar.add(Calendar.DATE, -1);
// 获取日
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("6月份的最后一天为" + day + "号");
总之,使用Calendar注意4点:
(1) 月份从0开始算起, 即0代表一月**
(2) 星期天为一周的第一天
(3) 时间推移使用add
(4) 不能对日期进行格式化,可以转为Date类型后格式化。