获取String中指定的月份的最后一天

时间:2014-05-02 09:37:09

标签: java date

我根据日历找到了一些答案,以获取当月的最后日期。

我需要一个函数,它将一个字符串作为日期2014-04-01 (yyyy-MM-dd)格式,并以相同的格式返回最后一个日期。

如果用户输入2014-04-05我需要返回2014-04-30的函数。

我正在尝试的代码是当前的日期时间,但我仍然坚持使用getactualmaxium点以及如何使用它。

        Calendar cal = Calendar.getInstance();

        cal.add(Calendar.MONTH,0);
        cal.set(Calendar.DATE, 0);


        Date firstDateOfPreviousMonth = cal.getTime();
        System.out.println(firstDateOfPreviousMonth );
        cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE));
        Date lastDateOfPreviousMonth = cal.getTime();
        System.out.println(lastDateOfPreviousMonth );

2 个答案:

答案 0 :(得分:2)

检查以下代码是否有帮助

 public static void main(String[] args) throws ParseException {
     String dateStr="2014-04-05";
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        cal.setTime(sdf.parse(dateStr));
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));  
        System.out.println(sdf.format(cal.getTime())); 

}

答案 1 :(得分:1)

如果你可以在Java 8中使用JodaTime或新的JSR-310 DateTime,我就不会使用Calendar。

String dateStr = "2014-04-05";
LocalDate endOfMonth = LocalDate.parse(dateStr)
                                .withDayOfMonth(1).plusMonths(1).minusDays(1);
System.out.println(endOfMonth);

你可以做什么,是在月初,增加一个月并减去一天。

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);

cal.set(Calendar.DATE, 1);
cal.add(Calendar.MONTH, 1);
cal.add(Calendar.DATE, -1);
System.out.println(cal.getTime());