浅谈Calendar类

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;
	}	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值