如何找到当月的最后一天的天数(整数)

时间:2018-05-31 07:08:56

标签: java date

我有特定日期,我想查找月份的最后一天数字(整数)。我正在使用以下代码,但始终返回日期当前。

    DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    Date date = (Date) sdf.parse(year+"-"+(month<10?("0"+month):month)+"-01");


    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);

    calendar.add(Calendar.MONTH, 1);
    calendar.set(Calendar.DAY_OF_MONTH, 1);
    calendar.add(Calendar.DATE, -1);

    Date dt = (Date) calendar.getTime(); -> dt is return current date always

示例:我的日期= 2018/04/30,我想找到30。

我无法在网站上找到答案。

日Thnx

5 个答案:

答案 0 :(得分:4)

如果使用Java 8(或更高版本),请不要使用Calendar。如果使用Java 6或7,您可能需要考虑使用ThreeTen Backport。在任何一种情况下,请使用Java Time API。

使用Java时间

由于输入为int yearint month,请使用YearMonth

要查找最后一天的月份,请致电lengthOfMonth()

要在月末获取日期,请致电atEndOfMonth()

演示

int year = 2020;
int month = 2;

int lastDay = YearMonth.of(year, month).lengthOfMonth();
System.out.println(lastDay);

LocalDate date = YearMonth.of(year, month).atEndOfMonth();
System.out.println(date);

输出

29
2020-02-29

使用Joda-Time

如果您没有Java 8,并且已经使用Joda-Time,请按以下方式执行:

演示

int year = 2020;
int month = 2;

int lastDay = new LocalDate(year, month, 1).dayOfMonth().getMaximumValue();
System.out.println(lastDay);

LocalDate date = new LocalDate(year, month, 1).dayOfMonth().withMaximumValue();
System.out.println(date);

输出

29
2020-02-29

使用日历

如果您坚持使用Calendar,请拨打其他答案中提及的getActualMaximum(Calendar.DAY_OF_MONTH)

由于输入为int yearint month,因此不要构建和解析字符串,只需直接设置Calendar字段即可。请注意,Calendar中的“月份”是从零开始的。

演示

int year = 2020;
int month = 2;

Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(year, month - 1, 1);
int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);

calendar.set(Calendar.DAY_OF_MONTH, lastDay);
Date date = calendar.getTime();

System.out.println(lastDay);
System.out.printf("%tF%n", date);

输出

29
2020-02-29

答案 1 :(得分:3)

  

有具体的日期,我想查找月的最后一天数字(整数)

getActualMaximum()就是你在这里寻找的。

Calendar cal = Calendar.getInstance();
cal.setTime(parsedDate);
cal.getActualMaximum(Calendar.DAY_OF_MONTH);

答案 2 :(得分:1)

您可以使用日历,如下所示:

calendar.getActualMaximum(Calendar.DAY_OF_MONTH);

或者,如果你有joda,通常更好:

DateTime d = new DateTame(dt);
d.dayOfMonth().getMaximumValue();

答案 3 :(得分:1)

Calendar calendar =Calendar.getInstance();
calendar.set(Calendar.DATE, 1); 
calendar.roll(Calendar.DATE, -1); 
int lastDate=calendar.get(Calendar.DATE);

答案 4 :(得分:1)

首先,您如何获得使用年份?

使用Java Time LocalDate应该很简单:

import java.time.*;
import static java.time.Month.*;
import static java.time.temporal.TemporalAdjusters.*;
import static java.time.temporal.ChronoField.*;

int lastDay = LocalDate.now()   // or whatever date you want
                  .with(Month.of(yourMonth))
                  .with(lastDayOfMonth())
                  .get(DAY_OF_MONTH);

 // or, if you have year and month, and want to find the corresponding last day
int lastDay = LocalDate.of(yourYear, yourMonth, 1)
                  .with(lastDayOfMonth())
                  .get(DAY_OF_MONTH);