2017-03-24 92 views
0

我正在尝试做一些非常简单的事情,拿一个日期并从下一个月获取第一天。我曾尝试使用日历。这里的日期是日历类型。Java获取下个月的第一天给定日期

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 

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

+0

月份值是从零开始的...所以11意味着12月份当您做cal.set(2016,11,30) – dev8080

+2

IMO时,这个零基月份是这个日期API中最糟糕的事情。我建议您使用其他API:http://stackoverflow.com/a/589940/7605325 –

+0

如果您可以使用Java SE 8,请使用新的LocalDate API。 – dev8080

回答

2

请尝试以下操作,但请改用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()); 
    } 
} 

它打印:

today date: Wed Nov 30 00:00:00 PST 2016 
next date: Thu Dec 01 00:00:00 PST 2016 

预期。

+0

感谢您的答复。日期将始终是月底。我怎样才能得到12-31-2016的解决方案,哪一年也会发生变化? – Mary

+0

使用cal.add(Calendar.DATE,1)解决此问题 – Mary

+0

不,我的解决方案也适用于该日期:'下个日期:Sun Jan 01 00:00:00 PST 2017' –

相关问题