时间Calendar类相关

1.Calendar设置时分秒

网上有很多比较日期的方法,很多都用到了SimpleDateFormat进行格式化,如果只是比较大小不进行显示,没有必要格式化。如果日期比较要包含时分秒,那可以直接用Date或者Calendar的before或者after方法。很多时候要不包括时间部分,只是比较年月日,就可以用Calendar去设置自己想要的时间格式,用SimpleDateFormat 去除时分秒转来转去很麻烦。可以用calendar的set方法,将时分秒统一置为0。

注意,获取get(Calendar.MONTH)月份的时候要+1,因为月份从0开始算的。

Calendar calendar = Calendar.getInstance();
 //将时分秒置0
 calendar.set(Calendar.HOUR_OF_DAY, 0);
 calendar.set(Calendar.MINUTE, 0);
 calendar.set(Calendar.SECOND, 0);
 calendar.set(Calendar.MILLISECOND, 0);
 Date curTime = calendar.getTime();
 calendar.add(Calendar.DATE, -1);
 Date termTime = calendar.getTime();
 SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss.SSS a");
 System.out.println("当前:"+curTime);
 System.out.println("当前:"+format.format(curTime));
 System.out.println("到期日:"+termTime);
 System.out.println("到期日:"+format.format(termTime));
 System.out.println(curTime.after(termTime));
 
输出:
当前:Tue Apr 09 00:00:00 CST 2019
当前:2019-04-09 00:00:00.000 上午
到期日:Mon Apr 08 00:00:00 CST 2019
到期日:2019-04-08 00:00:00.000 上午
true

除了用before或者after方法外,也可以直接calendar.getTimeInMillis()获取毫秒值进行比较,是long类型的,直接比较大小就可以,并且before和after方法源码也是比较的毫秒值。
另外,Calendar.HOUR_OF_DAY和Calendar.HOUR, 前者是24小时制,后者是12小时制,在用get的时候会区分出24和12小时制。

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 13);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date curTime = calendar.getTime();
SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss.SSS a");
System.out.println("当前1:"+curTime);
System.out.println("当前1:"+format.format(curTime));
System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
System.out.println(calendar.get(Calendar.HOUR));
输出:
当前1Tue Apr 09 13:00:00 CST 2019
当前12019-04-09 13:00:00.000 下午
13
1
======================================
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR, 13);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date curTime = calendar.getTime();
SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss.SSS a");
System.out.println("当前1:"+curTime);
System.out.println("当前1:"+format.format(curTime));
System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
System.out.println(calendar.get(Calendar.HOUR));

输出:
当前1Tue Apr 09 13:00:00 CST 2019
当前12019-04-09 13:00:00.000 下午
13
1

网上有人说set不同的HOUR和HOUR_OF_DAY,得到的时间小时制不同。但对于SimpleDateFormat格式化输出后都是一样的,至于格式化输出24小时制还是12小时制,HH:mm:ss是24小时制,hh:mm:ss是12小时制。
补充:
以上的例子是在上午测试的,我在中午过了12点之后也就是下午,我再次测试,终于发现set不同的HOUR和HOUR_OF_DAY的区别了。

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR, 1);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date curTime = calendar.getTime();
SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss.SSS a");
System.out.println("当前1:"+curTime);
System.out.println("当前1:"+format.format(curTime));
System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
System.out.println(calendar.get(Calendar.HOUR));
输出:
当前1Tue Apr 09 13:00:00 CST 2019
当前12019-04-09 13:00:00.000 下午
13
1
=======================================
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 1);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date curTime = calendar.getTime();
SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss.SSS a");
System.out.println("当前1:"+curTime);
System.out.println("当前1:"+format.format(curTime));
System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
System.out.println(calendar.get(Calendar.HOUR));

输出:
当前1Tue Apr 09 01:00:00 CST 2019
当前12019-04-09 01:00:00.000 上午
1
1

可以看出,在设置Calendar.HOUR的时候,calendar是根据当前执行代码时的系统时间去设置小时的,也就是根据当前时间的上午还是下午,我也就明白了源码中为什么说Calendar.HOUR的范围是0-11了。至于HOUR_OF_DAY就没有问题了,根据24小时制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值