日历月实例差一

Calendar Month Instance is off by one

这是我的代码:

循环传入月份。首先是 0(因为我输入的是一月),然后是 1,依此类推。下个月是二月,此循环将从该日期开始。 1、2 等

    int thisMonth = Calendar.getInstance().get(Calendar.MONTH) + 1;

    cal = Calendar.getInstance();
    df = new SimpleDateFormat("MMM yyyy", Locale.ENGLISH);
    cal.set(Calendar.MONTH, month + thisMonth);

    String sMonth = df.format(cal.getTime());

在第一个循环中,sMonth 是 2015 年 3 月。 在第二个循环中,sMonth 是 2015 年 3 月。 在第三个循环中,sMonth 是 2015 年 4 月。 在第四个循环中,sMonth 是 2015 年 5 月。 ..等等

如您所见,第一个月不是预期的二月。我相信现在是 1 月 29 日,所以这可能有一些原因,因为我们离 2 月如此之近。但如果是这样,为什么会发生两次呢?

我知道因为我没有使用 unix 时间戳所以事情并不准确,是否可以计算这个我至少可以获得准确的月份排序?

由于今天是 30 号,您将获得当前日期 (2015-01-30),并增加月份以获得 2015-02-30 - "rolls over" 到 2015-03-02因为二月没有 30 天。

避免此问题的一种方法是在更改月份之前将日期设置为 1。