日历月实例差一
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。
这是我的代码:
循环传入月份。首先是 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。