有没有办法将以下日期字符串解析为July 23 1916
而不是July 23 2016
?
System.out.println(new SimpleDateFormat("yy/MM/dd", Locale.US).parse("16/07/23"));
答案 0 :(得分: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)
可用于修复年份。
答案 1 :(得分: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"));
根据SimpleDateFormat.set2DigitYearStart(Date)
javadoc,
设置100年期间2位数年份将被解释为在用户指定的日期开始。
答案 2 :(得分:6)
可以使用方法set2DigitYearStart
。它允许您指定开始日期。解析日期将在[开始日期,开始日期+ 100年]的区间内。
有关详细信息,请参阅documentation。
答案 3 :(得分:0)
可能你正在寻找这个。
Calendar cal = Calendar.getInstance();
cal.set( Calendar.YEAR, 1900 );
SimpleDateFormat format = new SimpleDateFormat( "yy/MM/dd", Locale.US );
format.set2DigitYearStart( cal.getTime() );
System.out.println( format.parse( "16/07/23" ) );