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

YEARMONTHおよびメソッドでDAY_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

于 2013-05-25T06:04:10.810 に答える
3

あなたはもうすぐそこにいます..しかし、年、月は列挙型を参照しており、印刷しているのはそれらの列挙型の序数です。あなたが望むのは、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 に答える