4

使用内部类,我覆盖了公历的 toString 方法:

 GregorianCalendar date = new GregorianCalendar(2010, 5, 12)
      {
          public String toString()
          {
              return String.format("%s/%s/%s", YEAR, MONTH, DAY_OF_MONTH);
          }
      };

当我打印日期时,它应该是这样的:

2010/5/12

但输出是:

1/2/5

4

3 回答 3

7

YEAR,MONTH并且DAY_OF_MONTH只是在getset方法中使用的字段编号。这就是它的工作原理

        public String toString() {
            return String.format("%d/%02d/%02d", get(YEAR), get(MONTH) + 1, get(DAY_OF_MONTH));
        }

请注意日历中的月份以 0 开头,这就是为什么我们需要get(MONTH) + 1

于 2013-05-25T06:04:10.810 回答
7

这应该给你你所期望的:

final SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
        GregorianCalendar date = new GregorianCalendar(2010, 5, 12)
        {
            public String toString()
            {
                Date thisDate = this.getTime();
                return sdf.format(thisDate);
            }
        };
于 2013-05-25T06:05:39.853 回答
3

你快到了.. 但是 YEAR, MONTH 指的是枚举,而你打印的是这些枚举的序数。你想要的是使用那些带有 GregorianCalendar.get(Calendar.Value) 的枚举来获得真正的价值。

例子

GregorianCalendar date = new GregorianCalendar(2010, 5, 12)
{
    @Override
    public String toString()
    {
        return String.format("%s/%s/%s", get(YEAR), get(MONTH)+1, get(DAY_OF_MONTH));
    }
};

这将解决您的问题。

于 2013-05-25T06:05:06.813 回答