【问题标题】:Why is Calendar class (Java) resetting its fields?为什么 Calendar 类 (Java) 会重置其字段?
【发布时间】:2015-03-04 14:05:50
【问题描述】:

我正在尝试为日历类实例设置属性。但每次我到了 12 月 30 日,它都会重置到下一年。这是日历类的平局吗?

public Calendar setCalendar()
{
    String Date = "2013-12-30";
    int yyyy = Integer.parseInt(date.substring(0,4));
    int mm = Integer.parseInt(date.substring(5,7));
    int dd = Integer.parseInt(date.substring(8,10));
    System.out.println(yyyy + " " + mm + " " + dd);
    Calendar Cal= new GregorianCalendar();
    Cal.set(yyyy,mm,dd);
    System.out.println(Cal.get(Calendar.YEAR)+","+Cal.get(Calendar.MONTH));

    return Cal;
}

输出: 2013 12 30 2014,0

【问题讨论】:

  • 我建议您简化您的代码,看看它是否仍然会给出相同的感知行为。你的date.substring 代码对我来说看起来很可疑。看起来您的子字符串将包含“-”。

标签: java date calendar gregorian-calendar


【解决方案1】:

对于 Calendar,月份是从 0 开始的,因此您实际上是将月份设置为明年的一月。

如果您确实需要使用 Calendar,我建议您至少使用 SimpleDateFormat 将您的 String 解析为 Date 并使用它设置日历。

【讨论】:

    【解决方案2】:

    检查日历 API 文档,月份值是基于 0 的,即 Jan 是 0。

    month - 用于设置 MONTH 日历字段的值。月份值从 0 开始。例如,0 表示一月。

    您将月份设置为 12。这实际上为您提供了下一年。纠正尝试:

    Cal.set(yyyy,mm-1,dd);
    

    希望有帮助

    【讨论】:

      猜你喜欢
      • 2017-05-20
      • 2015-09-09
      • 1970-01-01
      • 2014-12-22
      • 1970-01-01
      • 2012-09-20
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      相关资源
      最近更新 更多