Calendar

Calendar

java.util.Calendar
日历类:该类是一个抽象类,封装了对时间对的相关操作。
常用的实现类格里高利历(阳历)
使用日历类是为了对时间进行相关的操作,比如计算时间。
eg:
	/*
	 * 使用Calendar的静态方法创建实例,
	 * 该方法会根据当前系统所在地区创建一个相应的实现,通常是GregorianCalendar
	 * 默认创建的日历实例表示当前系统时间。
	 */
		Calendar calendar = Calendar.getInstance();
	/*
	 * toString不能直观反映表示的日期
	 */
		System.out.println(calendar);
	结果:java.util.GregorianCalendar[time=1584275911367,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2020,MONTH=2,WEEK_OF_YEAR=12,WEEK_OF_MONTH=3,DAY_OF_MONTH=15,DAY_OF_YEAR=75,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=8,HOUR_OF_DAY=20,MINUTE=38,SECOND=31,MILLISECOND=367,ZONE_OFFSET=28800000,DST_OFFSET=0]	


	/*
	 * Calendar与Date之间的转换
	 * 
	 * Calendar -> Date
	 * Date getTime()
	 * Calendar提供了方法getTime(),该方法返回一个Date对象,
	 * 该对象表示的时间就是当前Calendar表示的时间。
	 */
	Date date = calendar.getTime();
	System.out.println(date);
	
	//表示明天这一时刻
	date.setTime(date.getTime()+1000*60*60*24);
	System.out.println(date);
			
	/*
	* Date ->Calendar
	* void setTime(Date date)
	* Calendar的setTime方法就可以使当前Calendar表示给定的Date所示的时间。
	*/
	//Calendar也表示明天这一刻了
	calendar.setTime(date);

Calendar提供了针对不同时间分量单独设置值的方法

void set(int field,int value)
其中第一个参数为:时间分量,例如:年,月,日等等。
第二个参数为对应的值。
时间分量是一个int值,使用Calendar提供的常量。
eg:
	Calendar calendar = Calendar.getInstance();
	System.out.println(calendar.getTime());
	/*
	 * 设置Calendar,使其表示2008-08-08 20:08-08
	 */
	//设定年
	calendar.set(Calendar.YEAR,2008);
	System.out.println(calendar.getTime());
			
	/*
	 * 设定月
	 * 月从0开始,0表示1月。
	 * 或者可以使用具体月的常量。
	 */
	//calendar.set(Calendar.MONTH,Calendar.AUGUST);
	calendar.set(Calendar.MONTH,7);
	System.out.println(calendar.getTime());
			
	/*
	 * 设置日
	 * 对应的时间分量常用的:
	 * DATE:月中天
	 * DAY_OF_MONTH:月中的天,与DATE一致
	 * DAY_OF_WEEK:周中的天,星期几
	 * DAY_OF_YEAR:年中的天
	 */
	calendar.set(Calendar.DAY_OF_MONTH,8);
	System.out.println(calendar.getTime());
	//时
	calendar.set(Calendar.HOUR_OF_DAY, 20);
	//分
	calendar.set(Calendar.MINUTE, 8);
	//秒
	calendar.set(Calendar.SECOND, 8);
			
	System.out.println(calendar.getTime());

获取一个Calendar表示的日期中各个时间分量对应的值

	Calendar calendar = Calendar.getInstance();
	/*
	 * int get(int field)
	 * 获取对应时间分量的值
	 */
	//获取年
	int year = calendar.get(Calendar.YEAR);
	//获取月
	int month = calendar.get(Calendar.MONTH)+1;
	//获取日
	int day = calendar.get(Calendar.DATE);
	System.out.println(year+"-"+month+"-"+day);
			
	int hour = calendar.get(Calendar.HOUR);
	int minute = calendar.get(Calendar.MINUTE);
	int second = calendar.get(Calendar.SECOND);
	System.out.println(hour+":"+minute+":"+second);
	
	//查看星期几?
	int dow = calendar.get(Calendar.DAY_OF_WEEK);
	System.out.println("周"+(dow==1?7:dow-1));
	String[] date = {"日","一","二","三","四","五","六"};
	System.out.println("周"+date[dow-1]);
	
	//到今天为止,今年已经过了多少天?
	int doy = calendar.get(Calendar.DAY_OF_YEAR);
	System.out.println(year+"年已经过了"+doy+"天");

获取某一个时间分量所允许的最大值

	Calendar calendar = Calendar.getInstance();		
	//当月总共有多少天?
	int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
	System.out.println(days);
	
	//查看2016年2月多少天?
	calendar.set(Calendar.YEAR, 2016);
	calendar.set(Calendar.MONTH, 1);
	days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
	System.out.println(days);
	
	//2016年总共多少天?
	days = calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
	System.out.println("2016年共"+days+"天");

Calendar中计算时间的方法

void add(int field.int value)
对指定的时间分量加上给定的值,若给定的值是负数,则是减去给定的值。
eg:
	/*
	 * 查看3年2个月零1天以后的日期?
	 */
	Calendar calendar = Calendar.getInstance();
	
	//查看3年后
	calendar.add(Calendar.YEAR, 3);
	System.out.println(calendar.getTime());
	
	//再查看2个月后
	calendar.add(Calendar.MONTH, 2);
	System.out.println(calendar.getTime());
	
	//再查看8天后
	calendar.add(Calendar.DAY_OF_YEAR, 8);
	System.out.println(calendar.getTime());
	
	//再查看5小时以前?
	calendar.add(Calendar.HOUR, -5);
	System.out.println(calendar.getTime());

注意:
当遇到类似开发需求:要求用户输入一个日期,然后对该日期进行一系列的运算,再将计算后的日期显示给用户时。
流程如下:
1:获取用户输入的日期字符串
2:使用SimpleDateFormat将其转换为Date
3:创建一个Calendar,使其表示Date表示的日期
4:使用Calendar根据需求计算时间
5:将Calendar转换为一个Date
6:使用SimpleDateFormat将Date转换为字符串后显示给用户
eg:

	/**
	 * 要求用户输入自己的生日,格式为:
	 * 2000-09-02
	 * 经过计算,输出:
	 * 到今天为止一共活了XXXX天。
	 * 以及距离10000天还有多少天。
	 * 生存10000天的纪念日是:2028-01-19
	 *
	 */
	 System.out.println("输入您的生日:");
	Scanner scanner = new Scanner(System.in);
	String birstr = scanner.nextLine();
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	Date birth = sdf.parse(birstr);
	
	//计算已经活了多少天?
	Date now = new Date();
	long time = now.getTime()-birth.getTime();
	time = time/1000/60/60/24;
	System.out.println("恭喜您!到今天为止已经活了"+time+"天,请继续保持!");
	
	time = 10000 - time;
	System.out.println("距离10000天,还有"+time+"天!");
	
	time = time*1000*60*60*24;
	now.setTime(now.getTime()+time);
	
	System.out.println("生存10000天的纪念日为:"+sdf.format(now));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值