java--Calender类

来源:互联网 发布:牛人的工作效率 知乎 编辑:程序博客网 时间:2024/05/18 23:24

最近要使用Calender类,不用不知道,一用吓一跳。在这里记录一下遇到的问题。

1,首先看一下Calender类的部分源码。

    没错!Calender类默认sunday是一个星期的第1天,默认January是一年中的第0个月。

    有没有注意到第12个月(UNDECIMBER)?这个是给阴历用的,因为阴历有时会闰月。

2,获得日期要用get方法,而不是Calender属性,这一点在Calender的类的api有说明。

Calendar calendar = Calendar.getInstance();System.out.println(Calendar.YEAR);System.out.println(Calendar.MONTH);System.out.println(Calendar.DAY_OF_MONTH);System.out.println("======================");System.out.println(calendar.get(Calendar.YEAR));System.out.println(calendar.get(Calendar.MONTH));System.out.println(calendar.get(Calendar.DAY_OF_MONTH));

    看出来差别没?实际时间是2017-03-06.

3,Calender类的常用属性。(实际时间为2017-03-06 15:41:59)

AM 

指示从午夜到中午之前这段时间的 AM_PM 字段值。

System.out.println(calendar.AM);  //0

PM 

指示从中午到午夜之前这段时间的 AM_PM 字段值。

System.out.println(calendar.PM);  //1

AM_PM 

get 和 set 的字段数字,指示 HOUR 是在中午之前还是在中午之后。

System.out.println(calendar.get(Calendar.AM_PM)); //1

DATE/DAY_OF_MONTH

get 和 set 的字段数字,指示一个月中的某天。

System.out.println(calendar.get(Calendar.DATE)); //6

System.out.println(calendar.get(Calendar.DAY_OF_MONTH)); //6

DAY_OF_WEEK 

get 和 set 的字段数字,指示一个星期中的某天。

System.out.println(calendar.get(Calendar.DAY_OF_WEEK)); //2

DAY_OF_WEEK_IN_MONTH 

get 和 set 的字段数字,指示当前月中的第几个星期。

System.out.println(calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH)); //1

DAY_OF_YEAR 

get 和 set 的字段数字,指示当前年中的天数。

System.out.println(calendar.get(Calendar.DAY_OF_YEAR)); //65

HOUR 

get 和 set 的字段数字,指示上午或下午的小时。

System.out.println(calendar.get(Calendar.HOUR)); //3

HOUR_OF_DAY 

get 和 set 的字段数字,指示一天中的小时。

System.out.println(calendar.get(Calendar.HOUR_OF_DAY)); //15

MINUTE 

get 和 set 的字段数字,指示一小时中的分钟。

System.out.println(calendar.get(Calendar.MINUTE)); //41

MONTH 

get 和 set 的字段数字,指示月份。

System.out.println(calendar.get(Calendar.MONTH) + 1); //3

SECOND 

get 和 set 的字段数字,指示一分钟中的秒。

System.out.println(calendar.get(Calendar.SECOND)); //59

WEEK_OF_MONTH 

get 和 set 的字段数字,指示当前月中的星期数。  

System.out.println(calendar.get(Calendar.WEEK_OF_MONTH)); //2

WEEK_OF_YEAR 

get 和 set 的字段数字,指示当前年中的星期数。

System.out.println(calendar.get(Calendar.WEEK_OF_YEAR)); //10

YEAR 

get 和 set 的字段数字,指示年。

System.out.println(calendar.get(Calendar.YEAR)); //2017

PS:解释一下DAY_OF_WEEK_IN_MONTH和WEEK_OF_MONTH的区别,前者是一个月中的第几个星期(每个月的八号都是第二个星期第一天),后者是一个月中的星期数,跟该月的一号是星期几有关。

3,Calender类的一些方法。(实际时间为2017-03-06 17:12:21)

Calendar calendar = Calendar.getInstance();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
add(int field, int amount) 
为给定的日历字段添加或减去指定的时间量。
calendar.add(Calendar.DATE, -1);
System.out.println(sdf.format(calendar.getTime())); //2017-03-06 17:12:21
roll(int field, int amount) 

向指定日历字段添加指定(有符号的)时间量,不更改更大的字段。

calendar.roll(Calendar.HOUR, 20);

System.out.println(sdf.format(calendar.getTime())); //2017-03-07 13:12:21

Calender类API    http://tool.oschina.net/uploads/apidocs/jdk-zh/java/util/Calendar.html
0 0