1

我有以下代码。获取月份时会出现问题。它说“‘月’参数必须在 1 到 12 的范围内。” 它总是返回 0。为什么?

    String target = "2013-01-04";
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    Date date = df.parse(target);

   Calendar cal = Calendar.getInstance();
   cal.setTime(date);
   int year = cal.get(Calendar.YEAR);
   System.out.println("year-"+year);
   int month = cal.get(Calendar.MONTH);
   System.out.println("month-"+month);
   int day = cal.get(Calendar.DAY_OF_MONTH);
   System.out.println("day-"+day);
4

1 回答 1

5

这是 Calendar 类的一个怪癖。出于某种疯狂的原因,它使用从零开始的索引数月,即使所有其他日期部分都是从一开始的。

甚至不要考虑提出关于此的问题,因为您将加入一大群人:Calendar 可以说是 JDK 中最糟糕的类。

“修复”是使用jodatime 库,它非常适合您的所有日期操作、解析和格式化需求。这实际上是现在的行业标准。

于 2013-01-11T03:28:05.663 回答