天天看点

Calendar日历类

Calendar 类是一个抽象类,为我们提供了关于日期计算的相关功能,比如:年、月、日、时、分、秒的展示和计算。

      GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。

菜鸟雷区

      注意月份的表示,一月是0,二月是1,以此类推,12月是11。 因为大多数人习惯于使用单词而不是使用数字来表示月份,这样程序也许更易读,父类Calendar使用常量来表示月份:JANUARY、FEBRUARY等等。

【示例】GregorianCalendar类和Calendar类的使用

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

<code>import</code> <code>java.util.*;</code>

<code>public</code> <code>class</code> <code>TestCalendar {</code>

<code>    </code><code>public</code> <code>static</code> <code>void</code> <code>main(String[] args) {</code>

<code>        </code><code>// 得到相关日期元素</code>

<code>        </code><code>GregorianCalendar calendar = </code><code>new</code> <code>GregorianCalendar(</code><code>2999</code><code>, </code><code>10</code><code>, </code><code>9</code><code>, </code><code>22</code><code>, </code><code>10</code><code>, </code><code>50</code><code>);</code>

<code>        </code><code>int</code> <code>year = calendar.get(Calendar.YEAR); </code><code>// 打印:1999</code>

<code>        </code><code>int</code> <code>month = calendar.get(Calendar.MONTH); </code><code>// 打印:10</code>

<code>        </code><code>int</code> <code>day = calendar.get(Calendar.DAY_OF_MONTH); </code><code>// 打印:9</code>

<code>        </code><code>int</code> <code>day2 = calendar.get(Calendar.DATE); </code><code>// 打印:9</code>

<code>        </code><code>// 日:Calendar.DATE和Calendar.DAY_OF_MONTH同义</code>

<code>        </code><code>int</code> <code>date = calendar.get(Calendar.DAY_OF_WEEK); </code><code>// 打印:3</code>

<code>        </code><code>// 星期几 这里是:1-7.周日是1,周一是2,。。。周六是7</code>

<code>        </code><code>System.out.println(year);</code>

<code>        </code><code>System.out.println(month);</code>

<code>        </code><code>System.out.println(day);</code>

<code>        </code><code>System.out.println(day2);</code>

<code>        </code><code>System.out.println(date);</code>

<code>        </code><code>// 设置日期</code>

<code>        </code><code>GregorianCalendar calendar2 = </code><code>new</code> <code>GregorianCalendar();</code>

<code>        </code><code>calendar2.set(Calendar.YEAR, </code><code>2999</code><code>);</code>

<code>        </code><code>calendar2.set(Calendar.MONTH, Calendar.FEBRUARY); </code><code>// 月份数:0-11</code>

<code>        </code><code>calendar2.set(Calendar.DATE, </code><code>3</code><code>);</code>

<code>        </code><code>calendar2.set(Calendar.HOUR_OF_DAY, </code><code>10</code><code>);</code>

<code>        </code><code>calendar2.set(Calendar.MINUTE, </code><code>20</code><code>);</code>

<code>        </code><code>calendar2.set(Calendar.SECOND, </code><code>23</code><code>);</code>

<code>        </code><code>printCalendar(calendar2);</code>

<code>        </code><code>// 日期计算</code>

<code>        </code><code>GregorianCalendar calendar3 = </code><code>new</code> <code>GregorianCalendar(</code><code>2999</code><code>, </code><code>10</code><code>, </code><code>9</code><code>, </code><code>22</code><code>, </code><code>10</code><code>, </code><code>50</code><code>);</code>

<code>        </code><code>calendar3.add(Calendar.MONTH, -</code><code>7</code><code>); </code><code>// 月份减7</code>

<code>        </code><code>calendar3.add(Calendar.DATE, </code><code>7</code><code>); </code><code>// 增加7天</code>

<code>        </code><code>printCalendar(calendar3);</code>

<code>        </code><code>// 日历对象和时间对象转化</code>

<code>        </code><code>Date d = calendar3.getTime();</code>

<code>        </code><code>GregorianCalendar calendar4 = </code><code>new</code> <code>GregorianCalendar();</code>

<code>        </code><code>calendar4.setTime(</code><code>new</code> <code>Date());</code>

<code>        </code><code>long</code> <code>g = System.currentTimeMillis();</code>

<code>    </code><code>}</code>

<code>    </code><code>static</code> <code>void</code> <code>printCalendar(Calendar calendar) {</code>

<code>        </code><code>int</code> <code>year = calendar.get(Calendar.YEAR);</code>

<code>        </code><code>int</code> <code>month = calendar.get(Calendar.MONTH) + </code><code>1</code><code>;</code>

<code>        </code><code>int</code> <code>day = calendar.get(Calendar.DAY_OF_MONTH);</code>

<code>        </code><code>int</code> <code>date = calendar.get(Calendar.DAY_OF_WEEK) - </code><code>1</code><code>; </code><code>// 星期几</code>

<code>        </code><code>String week = </code><code>""</code> <code>+ ((date == </code><code>0</code><code>) ? </code><code>"日"</code> <code>: date);</code>

<code>        </code><code>int</code> <code>hour = calendar.get(Calendar.HOUR);</code>

<code>        </code><code>int</code> <code>minute = calendar.get(Calendar.MINUTE);</code>

<code>        </code><code>int</code> <code>second = calendar.get(Calendar.SECOND);</code>

<code>        </code><code>System.out.printf(</code><code>"%d年%d月%d日,星期%s %d:%d:%d\n"</code><code>, year, month, day,  </code>

<code>                        </code><code>week, hour, minute, second);</code>

<code>}</code>

      执行结果如图所示:

Calendar日历类

      编写程序,利用GregorianCalendar类,打印当前月份的日历,今天的日期是 2017-05-18 ,如图所示为今日所在月份的日历:

Calendar日历类

【示例】可视化日历的编写

<code>import</code> <code>java.text.ParseException;</code>

<code>import</code> <code>java.util.Calendar;</code>

<code>import</code> <code>java.util.GregorianCalendar;</code>

<code>import</code> <code>java.util.Scanner;</code>

<code>public</code> <code>class</code> <code>TestCalendar2 {</code>

<code>    </code><code>public</code> <code>static</code> <code>void</code> <code>main(String[] args) </code><code>throws</code> <code>ParseException {</code>

<code>        </code><code>System.out.println(</code><code>"请输入日期(格式为:2010-3-3):"</code><code>);</code>

<code>        </code><code>Scanner scanner = </code><code>new</code> <code>Scanner(System.in);</code>

<code>        </code><code>String dateString = scanner.nextLine(); </code><code>// 2010-3-1</code>

<code>        </code><code>// 将输入的字符串转化成日期类</code>

<code>        </code><code>System.out.println(</code><code>"您刚刚输入的日期是:"</code> <code>+ dateString);</code>

<code>        </code><code>String[] str = dateString.split(</code><code>"-"</code><code>);</code>

<code>        </code><code>int</code> <code>year = Integer.parseInt(str[</code><code>0</code><code>]);</code>

<code>        </code><code>int</code> <code>month = </code><code>new</code> <code>Integer(str[</code><code>1</code><code>]);</code>

<code>        </code><code>int</code> <code>day = </code><code>new</code> <code>Integer(str[</code><code>2</code><code>]);</code>

<code>        </code><code>Calendar c = </code><code>new</code> <code>GregorianCalendar(year, month - </code><code>1</code><code>, day); </code><code>// Month:0-11</code>

<code>        </code><code>// 大家自己补充另一种方式:将字符串通过SImpleDateFormat转化成Date对象,</code>

<code>        </code><code>//再将Date对象转化成日期类</code>

<code>        </code><code>// SimpleDateFormat sdfDateFormat = new SimpleDateFormat("yyyy-MM-dd");</code>

<code>        </code><code>// Date date = sdfDateFormat.parse(dateString);</code>

<code>        </code><code>// Calendar c = new GregorianCalendar();</code>

<code>        </code><code>// c.setTime(date);</code>

<code>        </code><code>// int day = c.get(Calendar.DATE);</code>

<code>        </code><code>c.set(Calendar.DATE, </code><code>1</code><code>);</code>

<code>        </code><code>int</code> <code>dow = c.get(Calendar.DAY_OF_WEEK); </code><code>// week:1-7 日一二三四五六</code>

<code>        </code><code>System.out.println(</code><code>"日\t一\t二\t三\t四\t五\t六"</code><code>);</code>

<code>        </code><code>for</code> <code>(</code><code>int</code> <code>i = </code><code>0</code><code>; i &lt; dow - </code><code>1</code><code>; i++) {</code>

<code>            </code><code>System.out.print(</code><code>"\t"</code><code>);</code>

<code>        </code><code>}</code>

<code>        </code><code>int</code> <code>maxDate = c.getActualMaximum(Calendar.DATE);</code>

<code>        </code><code>// System.out.println("maxDate:"+maxDate);</code>

<code>        </code><code>for</code> <code>(</code><code>int</code> <code>i = </code><code>1</code><code>; i &lt;= maxDate; i++) {</code>

<code>            </code><code>StringBuilder sBuilder = </code><code>new</code> <code>StringBuilder();</code>

<code>            </code><code>if</code> <code>(c.get(Calendar.DATE) == day) {</code>

<code>                </code><code>sBuilder.append(c.get(Calendar.DATE) + </code><code>"*\t"</code><code>);</code>

<code>            </code><code>} </code><code>else</code> <code>{</code>

<code>                </code><code>sBuilder.append(c.get(Calendar.DATE) + </code><code>"\t"</code><code>);</code>

<code>            </code><code>}</code>

<code>            </code><code>System.out.print(sBuilder);</code>

<code>            </code><code>// System.out.print(c.get(Calendar.DATE)+</code>

<code>            </code><code>//                ((c.get(Calendar.DATE)==day)?"*":"")+"\t");</code>

<code>            </code><code>if</code> <code>(c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {</code>

<code>                </code><code>System.out.print(</code><code>"\n"</code><code>);</code>

<code>            </code><code>c.add(Calendar.DATE, </code><code>1</code><code>);</code>