这是我的代码:
月份循环传入。 首先是 0(因为我输入的时间是 1 月),然后是 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 日,所以这可能有一些原因,因为我们离二月已经很近了。 但如果是这样的话,为什么会发生两次呢?
我知道因为我不使用unix时间戳,事情并不准确,有没有办法计算这个,我至少可以得到准确的月份排序?
由于今天是 30 号,您将获得当前日期 (2015-01-30),并增加月份以获得 2015-02-30 - 由于 2 月不会“滚动”到 2015-03-02还有30天。
避免此问题的一种方法是在更改月份之前将日期设置为 1。
在现代 Java 中,使用 java.time 类。切勿使用遗留类
Calendar
、Date
等
第一个 0(因为我输入时是一月
与遗留类相比,java.time类使用sane编号。因此,1 月至 12 月的月份为 1-12。
此循环将从该日期开始
您实际上并没有显示您的“循环”代码。所以我只能猜测。您似乎只对特定月份感兴趣,而不是日期。我们有一个课程
YearMonth
。
要获取当前月份需要时区。对于任何给定时刻,全球各地的时间和日期因时区而异。这意味着当日期是该月的第一天/最后一天时,月份也可能会有所不同。
ZoneId z = ZoneId.of ( "America/Edmonton" ) ;
YearMonth currentMonth = YearMonth.now( z ) ;
要将时间向前推进,请添加一个月。
YearMonth nextMonth = currentMonth.plusMonths ( 1 ) ;