作者:相依相伴一起慢慢变老 | 来源:互联网 | 2023-02-04 19:42
我试着在Java中开始和结束日期,我有1月到12月的月份JCombobox
和年度的 JCombobox
年份.
首先,我已经转换String
了月份编号并使用此代码:
if(month_sands.getSelectedIndex() != -1){
int mOnthnumber= month_sands.getSelectedIndex() + 1;
if(monthnumber>=9)
{
mOnth=String.valueOf(monthnumber);
}else
{
mOnth="0"+String.valueOf(monthnumber);
}
}
然后我创建了一个字符串dateString
来获取所选月份的第一个和最后一个日期LocalDate
,每件事情都运行良好但是当我选择二月份和2017年时它会给我一个例外java.time.DateTimeException: Invalid date 'February 29' as '2017' is not a leap year
获取第一个和最后一个日期的代码是
try {
String dateString = year_sands.getSelectedItem().toString()+"-"+month+"-"+"01";
DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.US);
LocalDate date = LocalDate.parse(dateString, dateFormat);
LocalDate startDate=date.withDayOfMonth(1);
LocalDate endDate = date.withDayOfMonth(date.getMonth().maxLength());
start_date=startDate.toString();
end_date=endDate.toString();
System.out.println(start_date);
System.out.println(end_date);
} catch (Exception e) {
e.printStackTrace();
}
我不知道有什么问题,请有人帮助我
1> Jesper..:
之所以会发生这种情况,是因为您maxLength()
在此行中使
LocalDate endDate = date.withDayOfMonth(date.getMonth().maxLength());
API文档说maxLength()
,该方法以天为单位返回本月的最大长度.2月份确实最多有29天(不是2017年,但这大概是2月份的一般情况,而不是在任何特定年份!).
这应该有效,因为它考虑了特定年份中月份的长度:
LocalDate endDate = date.withDayOfMonth(date.lengthOfMonth());