TL;博士
MonthDay.parse(
"12.31" ,
DateTimeFormatter.ofPattern("MM.dd")
)
捕捉DateTimeParseException
为无效的输入。
java.time.MonthDay
现代的方法使用java.time类,而不是在问题中看到的麻烦遗产类。
其中java.time类是MonthDay
,正是你所需要的。
我建议收集输入为两个不同的数字。
MonthDay md = MonthDay.of(x , y) ;
如果你坚持,你可以收集输入为一个组合字符串和parse。如果是这样,我建议你和你的用户使用标准ISO 8601格式:--MM-DD
。
MonthDay md = MonthDay.parse("--12-31") ;
或者使用DateTimeFormatter
定义模式。
DateTimeFormatter f = DateTimeFormatter.ofPattern("MM.dd") ;
MonthDay md = MonthDay.parse(input , f) ;
陷阱为DateTimeParseException
检测无效输入。
String input = "13.10" ; // Invalid input. Month must be 1-12.
DateTimeFormatter f = DateTimeFormatter.ofPattern("MM.dd") ;
MonthDay md = null ;
try
{
md = MonthDay.parse(input , f) ;
} catch (DateTimeParseException e) {
// … handle error …
System.out.println("Invalid input: " + input) ;
}
看到这个code run live at IdeOne.com。
输入无效:13.10
E:java.time.format.DateTimeParseException:文本'13 0.10' 无法解析:无法从TemporalAccessor获得MONTHDAY:{MonthOfYear = 13,DAYOFMONTH = 10},型的ISO java.time.format.Parsed
md.toString():空
A *魔术师* ...?它看起来像字段只是将最接近的近似值返回到它可以有效的日期。更清楚地描述问题所在。 – hnefatl
请发表[mcve]。然后描述您所执行的**精确**步骤和程序显示的**精确**行为。如有必要,请使用屏幕截图补充您的描述。 –
仅供参考,您正在使用现在已遗留的麻烦的旧类,由java.time类取代。 –