阅读:5069回复:0
代码中时间的获取和操作(Calendar类)Calendar类的简单使用 在日常开发过程中,经常需要对时间进行操作,获取到当前年月日时等数据。或是获得一个时间段的时间,例如某一个月的第一天和最后一天的时间区间、某一个星期的时间区间等。Java中提供了两种时间操作类,Date类和Calendar类。 在jdk1.0版本中,使用Date类进行时间信息的操作,使用时需要创建实例Date date=new Date()。在jdk1.1版本之后,系统推荐使用Calendar类进行时间信息的操作,Date的许多方法都已经过时(不建议使用),并且在设计上Calendar类的功能也比Date类强大许多。Calendar类是一个抽象类,使用时用Calendar ca=Calendar.getInstance()即可获得当前时区下的时间对象。 以下是比较常用的一些Calendar类操作时间的方法和一些场景,并不一定是固定的方法,只提供一个思路。 1. 获取当前时间的年月日时分等信息 类似于Date类中的getTime()等方式,Calendar中提供了通用的get()方法来取对应的信息,如下所示(其中cNow表示建立的Calendar对象)。 Int year=cNow.get(Calendar.YEAR); Int month=cNow.get(Calendar.MONTH); Int day=cNow.get(Calendar.DAY_OF_MONTH); //day_of_month表示当前月的日期号,day_of_year则表示在今年中的第几天 Int hour=cNow.get(Calendar.HOUR_OF_DAY); //HOUR_OF_DAY表示当天的时数 上述的HOUR_OF_DAY等是Calendar的静态参数,了解其代表的意义即可取到对应的信息。 2. 获取当前时间前(或后)几天(几月)的时间 有时需要获得某一个时间的区间,或是需要进行时间转换时(例如世界时和北京标准时之间相差8小时等)。则使用Calendar类的add方法。如下所示。 cNow.add(Calendar.MONTH,x); //其中x是一个int值,负数表示时间减,正数表示加 cNow.add(Calendar.HOUR_OF_DAY,x); 上面的HOUR_OF_DAY的意义同1节点中所述,这里需要注意的是,上面的cNow对象在进行add操作之后,其本身的值就变化了。比如2019-05-19 10:00:00通过add方法往前减了两小时后变成2019-05-19 08:00:00,若此时再对cNow对象减一小时的话,cNow对象代表的时间就变成了2019-05-19 07:00:00,这是开发过程容易忽略的点。 3. 获取当前周(当前月)第一天至最后一天的时间区间 Calendar cStart=Calendar.getInstance(); Calendar cEnd=Calendar.getInstance(); cStart.set(Calendar.DAY_OF_MONTH,1); //当前月第一天 cEnd.add(Calendar.MONTH,1); cEnd.set(Calendar.DAY_OF_MONTH,1); cEnd.add(Calendar.DAY_OF_MONTH,-1); //先把cEnd的值set为下月的第一天,然后减一天即为当前月的最后一天。 4. 获取某一个月的第一天到最后一天的时间 这里的思路同3节点中所描述的类似,区别在于将cStart与cEnd的月值设置为你需要找出的月的值即可。 Calendar cStart=Calendar.getInstance(); Calendar cEnd=Calendar.getInstance(); //假设要找出6月的开始与结束日期 Int month=6; cStart.set(Calendar.MONTH,month); cEnd.set(Calendar.MONTH,month); cStart.set(Calendar.DAY_OF_MONTH,1); //当前6月第一天 cEnd.add(Calendar.MONTH,1); cEnd.set(Calendar.DAY_OF_MONTH,1); cEnd.add(Calendar.DAY_OF_MONTH,-1); //先把cEnd的值set为下月的第一天,然后减一天即为当前月的最后一天。 5. 获取某个月某个周第一天到最后一天的时间 假设要取出5月第三周的第一天至最后一天的时间(7天)。 Int month=5,week=3; Calendar cStart=Calendar.getInstance(); Calendar cEnd=Calendar.getInstance(); cStart.set(Calendar.MONTH,month); cEnd.set(Calendar.MONTH,month); cStart.set(Calendar.WEEK_OF_MONTH,week); cEnd.set(Calendar.WEEK_OF_MONTH,week); //这四句语句将两个时间移到了5月的第三周中 cStart.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY); cEnd.set(Calendar.DAY_OF_WEEK,Calendar.SATURDAY); //这里就把这两个时间设置为了5月第三周的开始和结束时间了,但是这是以国际标准的星期天为一周开始,周六为一周结束的情况。若想按照周一为开始,周日为结束的话应该以下面这样。 int day_of_week = cal.get(Calendar. DAY_OF_WEEK) - 1; if (day_of_week == 0 ) { day_of_week = 7 ; } cStart.add(Calendar.DATE , -day_of_week + 1 ); cEnd.add(Calendar.DATE , -day_of_week + 7 ); 6. SimpleDateFormat类的使用 扩展内容,时间戳经常会和String字符串相互转换,这时候需要用到SimpleDateFormat类来进行转换。主要方法有两个。 SimpleDateFormat df=new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”); df.parse(Str); //这里字符Str的格式标准需同上面的yyyy-MM-dd一致,否则会报错 df.format(Date); //这里为原始时间格式Date类型,与Calendar类可用getTime()方法转换 |
|