使用Calendar-Java的日期问题

使用Calendar-Java的日期问题,java,calendar,Java,Calendar,我尝试使用日历时遇到问题。 看: 现在,控制台: 在这个方法中,我将设置一个日期以及要添加到该日期的月份数。问题就在那里,这一天就像今天18,而不是我过去的第一天。预期的结果是5月/ 01日/ 2019日- Jun/01/2019 - JUL/01/2019</P>< P>,如果可能的话,考虑使用更新的java日期对象。参见,例如 然而,OP的具体问题是新的GregorianCalendar调用。它未使用原始日期的指定日期/时间 调整代码的一种方法是: public static Calend

我尝试使用日历时遇到问题。 看:

现在,控制台:


在这个方法中,我将设置一个日期以及要添加到该日期的月份数。问题就在那里,这一天就像今天18,而不是我过去的第一天。预期的结果是5月/ 01日/ 2019日- Jun/01/2019 - JUL/01/2019</P>< P>,如果可能的话,考虑使用更新的java日期对象。参见,例如

然而,OP的具体问题是新的GregorianCalendar调用。它未使用原始日期的指定日期/时间

调整代码的一种方法是:

public static Calendar novaData(Calendar originDate, Integer amountMonth) {
    System.out.println("Origin date: " + originDate.getTime() + " - Add " + amountMonth + " Months");
    Calendar date = new GregorianCalendar();
    date.setTime(originDate.getTime());
    date.setTimeZone(originDate.getTimeZone());

    date.add(Calendar.MONTH, amountMonth);
    System.out.println(date.getTime());

    return date;
}
根据测试输入,输出将月份向前移动

起始日期:2019年5月18日星期六18:01:21 GMT-加上0个月 2019年5月18日星期六18:01:21 GMT 起始日期:2019年5月18日星期六18:01:21 GMT-增加1个月 2019年6月18日星期二18:01:21 GMT 起始日期:2019年5月18日星期六18:01:21 GMT-加上2个月 2019年7月18日星期四18:01:21 GMT

请注意,没有充分考虑闰年、负值等问题。

java.time 我从您期望的输出中得出结论,您只对日期感兴趣,而不是一天中的时间或时区。如果是这样,LocalDate类就是要使用的正确类

如果您只对月份感兴趣,而不是对月份的日期感兴趣,请使用YearMonth而不是LocalDate。除声明和初始化外,代码将相同:

    YearMonth originDate = YearMonth.of(2019, Month.MAY);
不要使用日历和日历。这些课程设计拙劣,早已过时。除此之外,它们还为每个对象提供一天中的一个时间、一个时区、一周计划等等,我认为您不需要这些,这只会让那些阅读您代码的人感到困惑

链接:解释如何使用java.time。

使用GregoriaCalendar创建日期对象时,只指定了时区。因此它将使用当前时间:。我建议您不要使用日历和公历日历。这些课程设计拙劣,早已过时。而是使用ZoneDateTime或来自的其他类。
    LocalDate originDate = LocalDate.of(2019, Month.MAY, 1);
    for (int amountMonth = 1; amountMonth <= 3; amountMonth++) {
        System.out.println("Origin date: " + originDate + " - Add " + amountMonth + " Months");
        System.out.println(originDate.plusMonths(amountMonth));
    }
Origin date: 2019-05-01 - Add 1 Months
2019-06-01
Origin date: 2019-05-01 - Add 2 Months
2019-07-01
Origin date: 2019-05-01 - Add 3 Months
2019-08-01
    YearMonth originDate = YearMonth.of(2019, Month.MAY);
Origin date: 2019-05 - Add 1 Months
2019-06
(etc.)