如何控制SimpleDateFormat解析为19xx或20xx?

Jas*_*son 23 java date-format simpledateformat

有没有办法解析以下日期字符串July 23 1916而不是July 23 2016

System.out.println(new SimpleDateFormat("yy/MM/dd", Locale.US).parse("16/07/23"));
Run Code Online (Sandbox Code Playgroud)

ret*_*eto 35

Java Doc(http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html)说:

对于使用缩写年份模式("y"或"yy")进行解析,SimpleDateFormat必须解释相对于某个世纪的缩写年份.它通过将日期调整为创建SimpleDateFormat实例之前的80年和20年之后来实现此目的.例如,使用1997年1月1日创建的"MM/dd/yy"模式和SimpleDateFormat实例,字符串"01/11/12"将被解释为2012年1月11日,而字符串"05/04/64"将被解释为1964年5月4日.

该方法SimpleDateFormat.set2DigitYearStart(Date)可用于修复年份.


Ell*_*sch 15

如果我理解你的问题,那么是的,

SimpleDateFormat sdf = new SimpleDateFormat("yy/MM/dd", Locale.US);
Calendar cal = Calendar.getInstance(Locale.US);
cal.set(1900, 0, 1);
sdf.set2DigitYearStart(cal.getTime());
System.out.println(sdf.parse("16/07/23"));
Run Code Online (Sandbox Code Playgroud)

根据SimpleDateFormat.set2DigitYearStart(Date)javadoc,

设置100年期间2位数年份将被解释为在用户指定的日期开始.


Hen*_*nry 6

set2DigitYearStart可用于此的方法.它允许您指定开始日期.解析日期将在[开始日期,开始日期+ 100年]的时间间隔内.

有关详细信息,请参阅文档