Date和Calendar相关API知识点

Date和Calendar API

为了解决计时问题, 人类为时间人为的设计原点和刻度! 称为"历法"
计算机时间: 原点(元年)是1970年元旦, 刻度是毫秒数.

获取当前系统时间
	//获取当前系统时间毫秒数
	long now = System.currentTimeMillis();
	System.out.println(now);
	//1511331950177
	long year=now/1000/60/60/24/365+1970;
	System.out.println(year);
	//获得当前的秒数
	long sec=now/1000 % 60;
	System.out.println(sec);
	long min = now/1000/60 % 60;
	System.out.println(min);
	long hour = now/1000/60/60%24+8;
	System.out.println(hour);
	//long的最大值是哪一年?
	long max = Long.MAX_VALUE;
	System.out.println(max); 
	year = max/1000/60/60/24/365+1970;
	System.out.println(year); 
Date相关API
/**
* Date API
*Date内部封装了一个时间毫秒数(UTC/GMT)用于表示的时间, 提供时间分量的计算方法, 但是由于历史原因,不建议使用, 这些时间分量计算方法建议使用Calender替换.
*date.getTime() 获取时间毫秒数
* date.setTime(t) 设置(修改)时间毫秒数
*/
long now=System.currentTimeMillis();
Date date = new Date(now);
//new Date(); 默认构造器封装的就是当前时间
SimpleDateFormat 日期转换类 format方法和parse方法
public static void main(String[] args) throws Exception{
		/*
		 * 日期格式化输出
		 * SimpleDateFormat 类
		 * 1. 提供了日期数据格式化为String
		 *   方法, 用于将日期显示为人类习惯
		 *   的格式
		 *   format() 方法
		 * 2. 提供了将人类习惯的日期字符串,
		 *   转换为计算机能处理的 Date 时间
		 *   也就是毫秒数
		 *   parse() 方法
		 */
		
		SimpleDateFormat fmt=
				new SimpleDateFormat();
		//将date的时间毫秒数, 转换为人类习惯
		//年月日 时分 字符串
		Date date = new Date();
		String str=fmt.format(date);
		System.out.println(str);
		//可以利用自定义格式实现日期的格式化
		long t = date.getTime();
		t+=1000L*60*60*24*90;
		date.setTime(t); 
		fmt=new SimpleDateFormat(
				"yyyy-M-d HH:mm:ss");
		str=fmt.format(date);
		System.out.println(str); 
		
		//将人类习惯的时间字符串, 转换为date
		String d = "1949-10-1"; 
		//根据被解析的字符串格式设置 "格式规则"
		SimpleDateFormat fmt2=
				new SimpleDateFormat(
				"yyyy-M-d");
		Date da = fmt2.parse(d);
		System.out.println(da);
		//1970年元旦以前的时间毫秒数是负数
		long l = da.getTime();
		System.out.println(l);
		
		//时间原点的理解
		Date dx = new Date(10000);
		System.out.println(
			fmt.format(dx)); 
	}
Calendar相关API
public static void main(String[] args) {
		/*
		 * 由于Date的API方法有设计缺陷
		 * 建议使用Calendar替换Date的API方法
		 * 这些方法功能包括:
		 * 1. 计算时间分量: 根据毫秒数换算
		 * 		时间分量: 年月日时分秒
		 * 2. 设置时间分量
		 * 		修改 年月日时分秒, 底层是利用
		 *  	毫秒数换算得到结果.
		 * 3. 增加/减少时间分量
		 * 		增加/减少指定的毫秒数
		 */
		//获得Calendar对象: 其中包含当前毫秒数
		//Calendar的默认实现类: 格里高里历
		// 就是公元历法
		Calendar cal=Calendar.getInstance();
		//获取(计算)日期分量的方法
		int sec = cal.get(Calendar.SECOND);//秒
		int min = cal.get(Calendar.MINUTE);//分
		int hour= cal.get(Calendar.HOUR);//时
		//月(MONTH)中的天数
		int d = cal.get(Calendar.DAY_OF_MONTH);
		int m = cal.get(Calendar.MONTH)+1;//月要+1
		int y = cal.get(Calendar.YEAR);//年
		System.out.println(
				y+"-"+m+"-"+d); 
		System.out.println(
				hour+":"+min+":"+sec); 
		//cal能够设置时间分量, 其底层就是
		//利用时间毫秒计算实现的.
		cal.set(Calendar.YEAR, 2018); 
		//cal可以转换为Date
		Date date = cal.getTime();
		System.out.println(date); 
		//设置时间的月份为1月 (JANUARY)
		cal.set(Calendar.MONTH, 
				Calendar.JANUARY);
		date = cal.getTime();
		System.out.println(date);
		
		//cal 可以增加时间分量, 也可以减少时间分量
		cal.add(Calendar.YEAR, 1);
		cal.add(Calendar.MONTH, -1); 
		date = cal.getTime();
		System.out.println(date);
		
		//检查一个月中最大的天数
		//Actual 实际上 Maximum 最大的
		int max=cal.getActualMaximum(
				Calendar.DAY_OF_MONTH);
		System.out.println(max);

	}
简单案例实现
public static void main(String[] args) 
		throws Exception {
		/*
		 * 计算劳动合同续签提醒日
		 * 1. 输入劳动合同签订日期
		 * 2. 输入有效年份
		 * 3. 计算到劳动合同到期时间
		 * 4. 计算提前一个月
		 * 5. 再提前一周
		 * 6. 如果遇到周末
		 * 	  如果是周日加一天
		 * 	 如果是周六加2天
		 * 7. 输出续签提醒日
		 */
		Scanner in=new Scanner(System.in);
		System.out.print("签订日期:");
		String d = in.nextLine();
		System.out.print("年数:");
		String y = in.nextLine();
		//将字符串转换为日期
		SimpleDateFormat fmt=
			new SimpleDateFormat("yyyy-M-d");
		Date signDate=fmt.parse(d);
		//将年份转换为整数:
		int years = Integer.parseInt(y);
		//调用计算方法
		Date dx = alert(signDate, years);
		//显示计算结果:
		String str=fmt.format(dx);
		System.out.println(str); 
		
	}
	/**
	 * 计算劳动合同提醒日期
	 * @param signDate 签订日期
	 * @param years 签订年份数
	 * @return 提醒日期
	 */
	public static Date alert(
			Date signDate, int years){
		//创建cal默认是当前时间
		Calendar cal=Calendar.getInstance();
		//将cal时间修改为签订时间
		cal.setTime(signDate);
		//计算到期时间
		cal.add(Calendar.YEAR, years);
		//提前一个月
		cal.add(Calendar.MONTH, -1);
		//提前一周
		cal.add(Calendar.WEEK_OF_MONTH, -1); 
		//判断是周末吗?
		int day=cal.get(Calendar.DAY_OF_WEEK);
		if(day==Calendar.SUNDAY){//周日
			cal.add(Calendar.DAY_OF_MONTH, 1);
		}else if(day==Calendar.SATURDAY){//六
			cal.add(Calendar.DAY_OF_MONTH, 2);
		}
		return cal.getTime();
	}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值