Calendar 日历类简述

一 概述

Calendar 类是一个抽象类(Calendar类不能直接创建实例),它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下个星期的日期)提供了一些方法;瞬间可用毫秒值来表示,它是距历(格林威治时间1970年1月1日的00:00:00.000)的偏移量。

二 使用

Calendar类如果要创建实例,必须通过getInstance方法构造Calendar的子类对象

1 获取时间
 // 使用默认时区和语言环境获得一个日历
	Calendar cal = Calendar.getInstance()
	// 赋值时年月日时分秒常用的6个值,注意月份下标从0开始,所以取月份要+1
	System.out.println("年:" + cal.get(Calendar.YEAR)); 
	System.out.println("月:" + (cal.get(Calendar.MONTH) + 1)); 
	System.out.println("日:" + cal.get(Calendar.DAY_OF_MONTH)); 
	System.out.println("时:" + cal.get(Calendar.HOUR_OF_DAY)); 
	System.out.println("分:" + cal.get(Calendar.MINUTE)); 
	System.out.println("秒:" + cal.get(Calendar.SECOND));

年:2018
月:2
日:12
时:15
分:57
秒:39
二 设置时间

月份的下标从 0 开始,设置时同样需要注意,比如我们设置为 2 月 15 日除夕当晚的倒计时的最后一秒: 2018-02-15 23:59:59可以这样:

Calendar cal = Calendar.getInstance();
				
 // 如果想设置为某个日期,可以一次设置年月日时分秒,由于月份下标从0开始赋值月份要-1
 // cal.set(year, month, date, hourOfDay, minute, second);
 cal.set(2018, 1, 15, 23, 59, 59);
			 
 或者:
// 或者6个字段分别进行设置,由于月份下标从0开始赋值月份要-1 
 cal.set(Calendar.YEAR, 2018); 
 cal.set(Calendar.MONTH, Calendar.FEBRUARY); 
 cal.set(Calendar.DAY_OF_MONTH, 15); 
 cal.set(Calendar.HOUR_OF_DAY, 23); 
 cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59); 
System.out.println(cal.getTime());
3 时间计算

add方法:

比如在除夕当晚最后一秒,add 一秒:

Calendar cal = Calendar.getInstance(); 
System.out.println(cal.getTime()); 
cal.set(2018, 1, 15, 23, 59, 59); 
cal.add(Calendar.SECOND, 1); 
System.out.println(cal.getTime());
	      
打印时间结果如下,日期会自动进入下一天:
Thu Feb 15 23:59:59 CST 2018
Fri Feb 16 00:00:00 CST 2018

再比如 1 月 31 号的时候,月份加一,会出现怎样结果:

Calendar cal = Calendar.getInstance(); 
cal.set(2018, 1, 31, 8, 0, 0); 
System.out.println(cal.getTime()); 
cal.add(Calendar.MONTH, 1); 
System.out.println(cal.getTime());
				 
 运行结果:
Wed Jan 31 08:00:00 CST 2018
Wed Feb 28 08:00:00 CST 2018

Andorid系统定时关机部分操作 : 当检测到当前设置的关机时间小于系统当前时间时,将本次设定的关机时间设定为明日同一时间:

	String shutdown = null;//关机时间字符串
	int[] AlarmOff = {2018,12,14,11,00}; //关机时间数据

	int mYear =  AlarmOff[0];
	int mMonth = AlarmOff[1];
	int mDay = AlarmOff[2];
	int mHour = AlarmOff[3];
	int mMinute = AlarmOff[4];
	
	//将关机时间转换为字符串
	StringBuilder date = new StringBuilder().append(mYear).append("/")
            .append((mMonth < 10) ? "0" + mMonth : mMonth) .append("/")
            .append((mDay < 10) ? "0" + mDay : mDay).append(" ")
            .append((mHour < 10) ? "0" + mHour : mHour).append(":")
            .append((mMinute < 10) ? "0" + mMinute : mMinute);
	
	shutdown = date.toString();
	
	
	//格式化关机时间 将关机时间字符串 转换为 yyyy/MM/dd HH:mm 格式的 英文日期时间格式
	Date date = null;
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
	
	try {
        date = sdf.parse(shutdown);
    } catch (ParseException e) {
        e.printStackTrace();
    }
	long timeSetup = date.getTime();//获取关机时间距离1970年1月1日(好像是这个时间)的毫秒数

	long currTime = System.currentTimeMillis();



if(timeSetup < currTime){
    date = getAfterDay(date); //将当前关机时间设置为第二天该时间关机
    timeSetup = date.getTime();//获取当前时间毫秒数
    Log.e(TAG,"shutdown day +1");
}


   //将当前关机时间设置为第二天该时间关机	
   public Date getAfterDay(Date d){
    Date date = null;
    Calendar calendar = Calendar.getInstance();//获取一个日历对象
    calendar.setTime(d); //将日历锁定到 d 时间
    calendar.add(Calendar.DAY_OF_MONTH,1);//将锁定时间在当前日历上后移一天
    date = calendar.getTime();//Calendar 类型转换为 Date 类型
    return date;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux老A

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值