日历类中常量 DATE 和 getTime() 之间的关系



我创建了一个程序来打印日历的时间和日期。

这是我的代码:

public class apples {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        System.out.println(c.getTime());
        System.out.println(Calendar.DATE);
        c.set(c.DATE, 1);
        System.out.println(c.getTime());
        System.out.println(Calendar.DATE);

输出:

Fri Nov 28 19:50:10 CET 2014
5
Sat Nov 01 19:50:10 CET 2014
5

问题:

  1. 为什么 DATE 的初始值为 5?

  2. 将 DATE 设置为 1 后,它保持为 5,因为它是一个常量,但 c.getTime() 返回的时间与以前不同。如何如果变量本身没有更改,该方法是否知道我将 DATE 字段设置为 1?

Calendar.DATE是一个

静态的最终值,指的是:

用于获取和设置的字段编号,指示月份中的某一天。这是DAY_OF_MONTH的同义词。该月的第一天的值为 1。

JavaDoc

它将始终为 5,因为这是分配给它的值。日历来源

  public final static int DATE = 5; // line 432
若要获取要

获取的值,请执行 get,然后使用 DATE 索引,即 5。

System.out.println(c.get(Calendar.DATE)); //get the calendar's value of the DATE field.

从技术上讲,由于我们知道 DATE 键是 5,你也可以侥幸逃脱(但不应该,因为编码方式不好!

System.out.println(c.get(5));

我们通常不这样做的原因是静态标识符提供了清晰度。

Calendar#DATE是一个static字段,用作

表示get的数字和表示月份日期的set。这是一个 DAY_OF_MONTH的同义词。该月的第一天的值为 1。

尽管您在此处将其作为实例变量访问

c.DATE

它实际上是一个值为 5 的类变量。

为什么 DATE 字段的初始值为 5?

这是一个内部实现细节。

当我将 DATE 设置为 1 时,它的值不会改变,但 getTimes() 方法的输出更改。该方法如何知道我设置了日期 字段为 1 如果其值没有更改(其值仍然是 5)?

同样,DATE永远不会改变。这是一个常数。您正在使用它来设置Calendar对象的日期。

最新更新