Java修道之路:日期和时间处理(3) 之 Calendar

之前java都是自学的,所以文章也都叫做“Java自学之路”,但是自今年12月起,开始正式的系统的学习了,也有了比以前更大的信心,所以我觉得要改成“Java修道之路”更贴切一些了,也算做是不再小打小闹的开始吧!当然,不是修道路的道……而是悟出自己对Java的理解和使用经验,这才谓之“道”!

好了,进入正题,今天说说日期处理中的Calendar类的常用方法,当然,我不是大神,只是记录学习的内容,将常用的方法简练的表示出来,供大家学习和参考,也算是复习吧!

Calendar类在 java.util.Calendar 中,是继 Date 类的一个新的日期处理的类,因为 Date 类对于时间处理有很多的不好的地方,所以很多方法都弃用了,改成了 Calender 的方法,不要看 Calendar 类中方法多,它们的确是很好用的,其实只用记住常用的一些方法就好了。

1、创建Calendar的实例,由于Calendar类的构造方法是protected的(受保护的访问权限),所以它提供了一个方法来返回实例:

Calendar c = Calendar.getInstance();

该方法返回的是一个当前日期时间的Calendar对象。

2、Calendar转为 Date

Date d = c.getTime();

这个方法的方法名比较坑,获得Date对象的方法名叫做getTime……

3、Date转为 Calendar,即使用 Date对象设置 Calendar对象

Date d = new Date();
c.setTime(d);

该方法是将一个 Date对象代表的日期时间设值到 Calendar对象中。

4、获取年月日时分秒

使用 Calendar的 get方法,还会使用到 Calendar提供的常量,常量非常方便,只用记住那些容易记住的常量名,而不用去管对应的 int值。

int year = c.get(Calendar.YEAR); // 年
int month = c.get(Calendar.MONTH) + 1; // 月, 月从0开始
int day = c.get(Calendar.DAY_OF_MONTH); // 日
int hour = c.get(Calendar.HOUR_OF_DAY); // 时,24小时制
int hour2 = c.get(Calendar.HOUR); // 时,12小时制
int minute = c.get(Calendar.MINUTE); // 分
int second = c.get(Calendar.SECOND); // 秒

需要注意的是,月份是从0开始算的,比较坑爹……

5、获取对应的天数,比如当前日期是该年的第几天,或者该周的周几

依然使用 get方法和常量。

int dayOfYear = c.get(Calendar.DAY_OF_YEAR); // 该年第dayOfYear天
int dayInWeek = c.get(Calendar.DAY_OF_WEEK); // 周dayInWeek
// 需要注意的是,星期是按照国外的来算,也就是说周日是一周的开始,返回1,周一返回2,以此类推

需要注意的是,星期是按照国外的来算,也就是说周日是一周的开始,返回1,周一返回2,以此类推

那么要返回中式的星期,并且显示为“周”一,“周”二,该怎么做呢?下面给出了方案:

String[] arr = {"日", "一", "二", "三", "四", "五", "六"};
int dayInWeek = cal.get(Calendar.DAY_OF_WEEK);
System.out.println("周" + arr[dayInWeek - 1]);

6、获取时间分量最大值,即该年最多多少天,该月最多多少天等等

使用 getActualMaximun方法以及常量。

int dayOfYear = cal.getActualMaximum(Calendar.DAY_OF_YEAR); // 当年共dayOfYear天
int daysOfMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH); // 当月共daysOfMonth天

7、根据不同的时间分量设置不同的值

使用 set方法和常量

c.set(Calendar.YEAR, 1999); // 设置为1999年
c.set(Calendar.MONTH, Calendar.AUGUST); // 设置为8月
// 月份也是常量,使用起来很方便,不用管月份对应的 int数值
c.set(Calendar.DAY_OF_MONTH, 20); // 设置为20号
c.set(Calendar.HOUR_OF_DAY, 22); // 设置为22点
// 如果设置为25的话,会自动跳到下一天的1点
// 即溢出也可以实现,并以此类推,如日期为32,会跳到下一月的1号, 但是最好不要这么干
c.set(Calendar.MINUTE, 10); // 设置为10分
c.set(Calendar.SECOND, 20); // 设置为20秒
c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); // 设置日期为该周的周三那天

8、时间分量的偏移

使用 add方法和常量。

cal.add(Calendar.YEAR, -1); // 当前年的上一年,如1999年变成1998年
c.add(Calendar.MONTH, +2); // 当前月的下两月,如8月变成10月

以上就是 Calendar类的常用的方法了,如果还有需要可以查看API。

(今晚真的是日了狗了……辛苦码完的文章,结果不知道为毛没有保存上,直接给我跳回到了第3点……我共写了8点啊,8点……………搞掉了5点,只有重新码字了……手都酸了……MBD)

本文《Java修道之路:日期和时间处理(3) 之 Calendar》来自 www.juwends.com ,欢迎转载或CV操作,但请注明出处,谢谢!