日历月份实例关闭了一个

问题描述 投票:0回答:2

这是我的代码:

月份循环传入。 首先是 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时间戳,事情并不准确,有没有办法计算这个,我至少可以得到准确的月份排序?

java calendar
2个回答
1
投票

由于今天是 30 号,您将获得当前日期 (2015-01-30),并增加月份以获得 2015-02-30 - 由于 2 月不会“滚动”到 2015-03-02还有30天。

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


0
投票

java.time

在现代 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 ) ;
© www.soinside.com 2019 - 2024. All rights reserved.