我有特定日期,我想查找月份的最后一天数字(整数)。我正在使用以下代码,但始终返回日期当前。
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
答案 0 :(得分:4)
如果使用Java 8(或更高版本),请不要使用Calendar
。如果使用Java 6或7,您可能需要考虑使用ThreeTen Backport。在任何一种情况下,请使用Java Time API。
由于输入为int year
和int 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
如果您没有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 year
和int 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()
就是你在这里寻找的。 p>
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);