在格里高利历中重写tostring方法

时间:2013-05-25 05:57:45

标签: java

使用内部类,我重写了格里高利历的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

3 个答案:

答案 0 :(得分:7)

YEARMONTHDAY_OF_MONTH只是getset方法中使用的字段编号。这是它的工作原理

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

请注意,Calendar中的月份从0开始,这就是我们需要get(MONTH) + 1

的原因

答案 1 :(得分: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);
            }
        };

答案 2 :(得分: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));
    }
};

这将解决您的问题。