我从字符串中手动设置日历中的日期和时间,其他日子工作正常,但 2 月 28 日和 29 日它设置错误的值

问题描述 投票:0回答:1
String req  ="0229191315"

private static DateFormat dateFrmtGmt - new SimpleDateFormat ("EEE MMM d HH:mm:ss z yyyy", Locale.ENGLISH);


SimpleDateFormat sdf=new SimpleDateFormat( "MMddHHmmss");

cal.setTime(sdf.parse(gmtDate));
cal.set(Calendar.YEAR, Calendar.getInstance().get(Calendar.YEAR));

dateFrmtGmt.setTimeZone(TimeZone.getTimeZone("GMT"));

return cal;

String = "0229191315"
将于 2024 年 3 月 1 日周五 19:13:15 GMT 回归

string="0301191315"
将于 2024 年 3 月 1 日星期五 19:13:15 GMT 回归

对于所有日期,它都设置正确的日期和时间,但 2024 年 1 月 28 日和 29 日的设置值分别为 2 月 29 日和 3 月 1 日。

java spring date time java-8
1个回答
0
投票

问题是您正在解析没有年份的输入。查看 SimpleDateFormat.parse() 方法的文档。

如果解析操作中未给出年份值,则解析的日期的年份值为 GregorianCalendar 的 1970。

由于 1970 年没有 2 月 29 日日期,因此解析返回 3 月 1 日。之后您设置实际年份,但日期仍保持解析时的样子。

在此答案中查看使用 java.time 包解决此问题的现代方法:https://stackoverflow.com/a/44470949/721855

© www.soinside.com 2019 - 2024. All rights reserved.