繁体   English   中英

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

[英]overriding tostring method in Gregorian Calendar

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

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

这应该给你你期望的东西:

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);
            }
        };

你几乎就在那里..但是,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));
    }
};

这将解决你的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM