Java常用基础类(二):Calendar
Calendar
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. |
常用的场景
获取今天或者之后多少天的日期
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(2019,9);
}
计算某一天是该年或该月的第几个星期
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(2019, 11, 11);
}
计算一年中的第几星期是几号
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(2019,26);
}
查询显示当前的后几天,前几天等
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(2019,11,10,1);
}
roll()方法和add()方法用法一样,不过roll()方法是在本月循环,比如,11月20号加五天,add()方法结果是?; roll()方法是11月5号,roll()方法用到的少,一般add()使用较多。测试roll()方法:
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(2019,11,20,5);
}
计算两个任意时间中间相隔的天数(计算任意两个日期的相隔天数使用场景较多,如查询某个时间段注册的新用户等等)
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(2019,07,10);
calendar2.set(2019,11,05);
int days=getDaysBetween(calendar1, calendar2);
System.out.println("相隔"+days+"天");
}
最后
-
更多参考精彩博文请看这里:《陈永佳的博客》
-
喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/97664.html