现在,必须同时处理
Date
和 Calendar
才能设置部分 Date
。但是一旦有了 Date
实例,就可以使用 Calendar
获得并设置部分 Date
。例如:
Date aDate = new Date(System.currentTimeMillis());
Calendar calendar = GregorianCalendar.getInstance();
calendar.setTime(aDate);
在这里,我们创建了一个 GregorianCalendar
,并将它的时间设置为以前创建的 Date
。通过在 Calendar
上调用不同的方法,也能做到这一点:
Calendar calendar = GregorianCalendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
通过 Calendar
,我们现在可以访问和操作 Date
的组件。获得并设置部分 Date
也成为一个简单的过程。只需要在 Calendar
上调用适当的 getter 和 setter 即可,如下所示:
calendar.set(Calendar.MONTH, Calendar.JULY);
calendar.set(Calendar.DAY_OF_MONTH, 15);
calendar.set(Calendar.YEAR, 1978);
calendar.set(Calendar.HOUR, 2);
calendar.set(Calendar.MINUTE, 15);
calendar.set(Calendar.SECOND, 37);
System.out.println(calendar.getTime());
这将输出 1987 年 7 月 15 日上午 2 点 15 分 37 秒的格式化后的输出字符串。(在 Calendar
上也有一些辅助方法,允许同时设置一些或几乎所有的组件。)这里调用的是 set()
,它带有两个参数:
-
- 想要设置的
Date
的 field(或组件)。 - 该字段的值。
- 想要设置的
我们可以用 Calendar
类中指定的常数来引用这些字段。在某些情况下,同一字段会有一个以上的名称,比如 Calendar.DAY_OF_MONTH
,还可以用 Calendar.DATE
来引用它。除了可能是 Calendar.MONTH 的值和 Calendar.DATE
的值之外,其他的值都很简单。在 Java 语言的日期中,月份是基于 0 的(也就是说,1 月是 0),这使得使用指定的常数来设置月份值成为一种明智之举,但也使得正确地显示日期成为令人沮丧的事。小时的数值是从 0 到 24。
一旦有一个建立好的 Date
,就可以提取其中的一部分。
System.out.println("The YEAR is: " + calendar.get(Calendar.YEAR));
System.out.println("The MONTH is: " + calendar.get(Calendar.MONTH));
System.out.println("The DAY is: " + calendar.get(Calendar.DATE));
System.out.println("The HOUR is: " + calendar.get(Calendar.HOUR));
System.out.println("The MINUTE is: " + calendar.get(Calendar.MINUTE));
System.out.println("The SECOND is: " + calendar.get(Calendar.SECOND));
System.out.println("The AM_PM indicator is: " + calendar.get(Calendar.AM_PM));