Calendar的使用

来源:互联网 发布:英雄联盟官方商城 淘宝 编辑:程序博客网 时间:2024/05/29 14:56

在从事开发过程中,我们总会遇到一些处理时间的问题,这里我来介绍下Calendar对时间的强大处理功能:

这里先写一个基础时间作为操作说明,为了体现一些Calendar的强大,我们选择一个比较棘手的时间,2013年1月3号,这样也方便我们涉及到跨年的计算:

String s = "2013-01-31 12:03:45";Calendar car = Calendar.getInstance();Date nowDate = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");try {nowDate = sdf.parse(s);} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}car.setTime(nowDate);

这样我们的当前测试时间就为2013-01-31

下面我举例说明下其中的一些对我们处理和获取时间很有帮助的方法:

1、最常用的获取时间值

                //获取当前时间的年月日小时分int year = car.get(Calendar.YEAR);int month = car.get(Calendar.MONTH)+1;  //这里说明下为什么加1,因为月份是从0开始的                                //所以为了得到我们实际日历时间,要加1int day = car.get(Calendar.DAY_OF_MONTH);int hour = car.get(Calendar.HOUR_OF_DAY);int minute = car.get(Calendar.MINUTE);int second = car.get(Calendar.SECOND);                System.out.println("当前时间是:"+year+"年"+month+"月"+day+"号"                                   +hour+"时"+minute+"分"+second+"秒");

2、获取星期时间

//获取当前时间的星期时间int weekYear = car.get(Calendar.WEEK_OF_YEAR);System.out.println("当前时间是这一年的第"+weekYear+"个星期");int weekMonth = car.get(Calendar.WEEK_OF_MONTH);int weekDay = car.get(Calendar.DAY_OF_WEEK);String week = "";switch(weekDay){case 1: week = "星期日";break;case 2: week = "星期一";break;case 3: week = "星期二";break;case 4: week = "星期三";break;case 5: week = "星期四";break;case 6: week = "星期五";break;case 7: week = "星期六";break;}System.out.println("当前时间是:"+month+"月的第"+weekMonth+"星期的"+week);

3、前后快速调整时间

如果你想向前推一个月,那么下面的代码可以轻松实现,并且帮你自动改变年月,以此类推:

                car.add(Calendar.MONTH, -1);   //向前滚动一个月car.set(car.get(Calendar.YEAR),car.get(Calendar.MONTH),car.get(Calendar.DAY_OF_MONTH));System.out.println("变化后的时间:"+sdf.format(car.getTime()));

如果你想向后退一个月,那么下面的代码可以轻松实现,并且帮你自动改变年月,以此类推:

car.add(Calendar.MONTH, 1);    //向后滚动一个月car.set(car.get(Calendar.YEAR),car.get(Calendar.MONTH),car.get(Calendar.DAY_OF_MONTH));System.out.println("变化后的时间:"+sdf.format(car.getTime()));

4、计算周期的案例:

以当前日期为例,我们求上个月的第一天以及这个月的最后一天,输出这2个日期

                car.add(Calendar.MONTH, -1);int beforDay = car.getActualMinimum(Calendar.DAY_OF_MONTH);  //获取月份的第一天System.out.println("上个月的日期"+beforDay);car.set(car.get(Calendar.YEAR), car.get(Calendar.MONTH),beforDay);String upDate = sdf.format(car.getTime());car.add(Calendar.MONTH, 1);int nextDay = car.getActualMaximum(Calendar.DAY_OF_MONTH);    //获取月份的最后一天System.out.println("这个月日期"+nextDay);car.set(car.get(Calendar.YEAR), car.get(Calendar.MONTH),nextDay);String nextDate = sdf.format(car.getTime());System.out.println("计费周期:"+upDate+"至"+nextDate);

5、日期的滚动增减

与上面的调整时间有点相似,但是又略有不同

1)上面获取的星期时间如果在经过时间滚动的话,来看看,会发现,一个月的第几个星期是不会超过5的,在5之内循环而不超出

//时间的滚动car.roll(Calendar.WEEK_OF_MONTH, 1);//获取当前时间的星期时间int weekYear = car.get(Calendar.WEEK_OF_YEAR);System.out.println("当前时间是这一年的第"+weekYear+"个星期");int weekMonth = car.get(Calendar.WEEK_OF_MONTH);int weekDay = car.get(Calendar.DAY_OF_WEEK);String week = "";switch(weekDay){case 1: week = "星期日";break;case 2: week = "星期一";break;case 3: week = "星期二";break;case 4: week = "星期三";break;case 5: week = "星期四";break;case 6: week = "星期五";break;case 7: week = "星期六";break;}System.out.println("当前时间是:"+month+"月的第"+weekMonth+"星期的"+week);

2)对月份进行操作滚动,会发现参数为1时是当月不动,0向前滚动一个,-1向前滚动2个月,2为向后滚动一个月,3为向后滚动2个月,这里说明下12月显示为0月

//时间的滚动car.roll(Calendar.MONTH, 0);System.out.println("变更后的月份为:"+car.get(Calendar.MONTH));

3)天数和年份的滚动,与月份不同的是,参数0为默认当前的不变,1为向后一天或者一年,-1为向前一天或一年

//时间的滚动car.roll(Calendar.DAY_OF_MONTH, -1);System.out.println("变更后的天数为:"+car.get(Calendar.DAY_OF_MONTH));


 


 


 

原创粉丝点击