我们的一位客户希望能够输入年份组件只有2位数的日期.该日期将在过去,因此如果2位数年份在当前年份之后,我们希望它在上个世纪工作,但如果2位数年份等于或小于当前年份,则工作在本世纪.
截至今天10/30/2008
01/01/01 = 01/01/2001
01/01/09 = 01/01/1909
这是一个奇怪的要求,我解决了这个问题,我只是不喜欢我的解决方案.感觉有更好的方法来做到这一点.
谢谢您的帮助.
public static String stupidDate(String dateString)
{
String twoDigitYear = StringUtils.right(dateString, 2);
String newDate = StringUtils.left(dateString, dateString.length() - 2);
int year = NumberUtils.toInt(twoDigitYear);
Calendar c = GregorianCalendar.getInstance();
int centuryInt = c.get(Calendar.YEAR) - year;
newDate = newDate + StringUtils.left(Integer.toString(centuryInt), 2) + twoDigitYear;
return newDate;
}
Run Code Online (Sandbox Code Playgroud) 使用Java 8,下面的代码将"18"解析为年"0018"而不是"2018".
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("M/d/y");
return LocalDate.parse(date, formatter);
Run Code Online (Sandbox Code Playgroud)
输入日期为"01/05/18".
1)为什么结果是"0018"?难道DateTimeFormatter没有按照80-20规则?
2)如何控制SimpleDateFormat解析为19xx或20xx?谈到SimpleDateFormat.set2DigitYearStart(Date)可以用来修复这一年.有没有类似的东西DateTimeFormatter?
我希望"M/d/y"能解析2到4位数年份.
"M/d/yy"抛出4位数的异常并将"01/05/97"解析为"2097-01-05".理想情况下,这应解析为"1997-01-05".
"M/d/yyyy"抛出2位数年份的例外情况.