Calendar类是什么
在日常编写代码的时候,很多时候需要用到时间,比如你登录一个网页,网页会显示
xxxx年-xx月-xx日 HH:mm:ss 会显示这样的一个时间提示,还有一些银行系统,会提示你明天你的存款到账之类的操作,这个时候就用到了我我们的Calendar类
Calendar类的初始化
因为Calendar类被abstract修饰,所以不能实例化对象,这个时候就有一个方法可以直接初始化当前日历的时间
Calendar cld=Calendar.getInstance();
这里的getInstance() 返回的实质上是Calendar的子类,因为每个国家都有自己的一套算法
Calendar类的常用方法
public class demo2 {
public static void main(String[] args) {
Calendar cld=Calendar.getInstance(); //获取到当前的时间
System.out.println("今年:"+cld.get(Calendar.YEAR));
System.out.println("本月:"+cld.get(Calendar.MONTH)+1); //因为月份默认的是0开始,所以输出时候要+1
System.out.println("本日:"+cld.get(Calendar.DATE));
System.out.println("本周第几天:"+cld.get(Calendar.DAY_OF_WEEK)); //因为国外的一周是从星期天开始的,到星期六结束
System.out.println("12小时制的时:"+cld.get(Calendar.HOUR));
System.out.println("24小时制的时:"+cld.get(Calendar.HOUR_OF_DAY));
System.out.println("分钟:"+cld.get(Calendar.MINUTE));
System.out.println("秒:"+cld.get(Calendar.SECOND));
cld.clear(); //此 Calendar 的所日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义。
System.out.println("格林年:"+cld.get(Calendar.YEAR));
System.out.println("格林月:"+cld.get(Calendar.MONTH)+1);
System.out.println("格林日:"+cld.get(Calendar.DATE));
}
}
以上的输出:
今年:2018
本月:111
本日:28
本周第几天:6
12小时制的时:2
24小时制的时:14
分钟:44
秒:31
格林年:1970
格林月:01
格林日:1
Calendar类和Date的转换
(1) Calendar转化为Date
Calendar cal=Calendar.getInstance();
Date date=cal.getTime();
(2) Date转化为Calendar
Date date=new Date();
Calendar cal=Calendar.getInstance();
cal.setTime(date);
add和roll的区别
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
Date date=cal.getTime();
System.out.println("当前时间:"+sdf.format(date));
cal.add(Calendar.DATE, -4);
date=cal.getTime();
System.out.println("add后时间:"+sdf.format(date));
cal.add(Calendar.DATE, 4);
date=cal.getTime();
System.out.println("add后时间:"+sdf.format(date));
以上输出:
当前时间:2018-12-28
add后时间:2018-12-24
add后时间:2018-12-28
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
Date date=cal.getTime();
System.out.println("当前时间:"+sdf.format(date));
cal.roll(Calendar.DATE, 4);
date=cal.getTime();
System.out.println("roll后时间:"+sdf.format(date));
以上输出:
当前时间:2018-12-28
roll后时间:2018-12-01
总结:
roll()是在当前月进行的循环,而add()是依次循环
计算两个日期相隔多少天
public class demo2 {
public static void main(String[] args) {
Calendar cld=Calendar.getInstance(); //获取到当前的时间
Calendar cld1=Calendar.getInstance();
cld1.set(2017,11,28);
System.out.println(getDaysBetween(cld,cld1));
}
public static int getDaysBetween (Calendar d1, Calendar d2) {
if (d1.after(d2)) {
Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
int y2 = d2.get(Calendar.YEAR);
for(;d1.get(Calendar.YEAR) != y2;d1.add(Calendar.YEAR, 1)) {
days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到当年的实际天数
}
return days;
}
}