Java 获取给定日期的下个月的第一天

Mar*_*ary 2 java calendar date

我想做一些非常简单的事情,获取一个日期并从中获取下个月的第一天。我尝试过使用日历。这里的日期是日历类型。

Calendar nextMonthFirst = (Calendar)date.clone();

     int year = date.get(Calendar.YEAR);
     int month =  date.get(Calendar.MONTH);

     nextMonthFirst.clear();

     nextMonthFirst.set(year, month+1,1);
     nextMonthFirst.add(Calendar.DAY_OF_MONTH, 0);
     return nextMonthFirst 
Run Code Online (Sandbox Code Playgroud)

当我使用日期作为 cal.set(2016,11,30); 我得到的输出为 2017-01-01 而不是 2016-12-01。知道我做错了什么吗?

Ked*_*ade 5

尝试以下操作,但使用 Java 8 和java.time API!

import java.util.Calendar;

import static java.util.Calendar.*;
import static java.util.Calendar.DAY_OF_MONTH;

/**
 * Created by kedar on 3/24/17.
 */
public class FirstDayOfNext {
    public static void main(String[] args) {
        Calendar today = getInstance();
        today.clear();
        today.set(2016, NOVEMBER, 30);
        System.out.println("today date: " + today.getTime());
        Calendar next = getInstance();
        next.clear();
        next.set(YEAR, today.get(YEAR));
        next.set(MONTH, today.get(MONTH) + 1);
        next.set(DAY_OF_MONTH, 1); // optional, default: 1, our need
        System.out.println("next  date: " + next.getTime());
    }
}
Run Code Online (Sandbox Code Playgroud)

它打印:

today date: Wed Nov 30 00:00:00 PST 2016
next  date: Thu Dec 01 00:00:00 PST 2016
Run Code Online (Sandbox Code Playgroud)

正如预期的那样。