gpt4 book ai didi

java.time.DateTimeException : Invalid date 'February 29' as '2017' is not a leap year Java

转载 作者:行者123 更新时间:2023-12-02 09:39:51 26 4
gpt4 key购买 nike

我尝试在Java中获取开始和结束日期,我在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闰年

获取第一个和最后一个日期的代码是

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();
}

我不知道做错了什么,请有人帮助我

最佳答案

发生这种情况是因为您在这一行中使用了 maxLength():

LocalDate endDate = date.withDayOfMonth(date.getMonth().maxLength());

方法 maxLength() 返回本月的最大长度(以天为单位),如 API documentation说。二月确实最多有 29 天(只是 2017 年没有,但这是一般的二月,而不是任何特定年份的二月!)。

这应该可行,因为它考虑了特定年份月份的长度:

LocalDate endDate = date.withDayOfMonth(date.lengthOfMonth());

关于java.time.DateTimeException : Invalid date 'February 29' as '2017' is not a leap year Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43776022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com