我试图String用"dd-MM-yy"格式解析一个Date对象.问题在于它试图猜测日期的世纪.
当从01到31指定时,年份被解释为2000s(21世纪),32 t0 99被认为是1900年代(20世纪).
SimpleDateFormat fm =new SimpleDateFormat("dd-MM-yy");
String datestr="21-11-31";
try {
Date date= fm.parse(datestr);
System.out.println(date);
} catch (ParseException e) {
}
Run Code Online (Sandbox Code Playgroud)
谁能帮我?我怎么能说明我只是整整地在21世纪工作.我并没有完全试图寻找操纵字符串或根据条件移动日期的技巧.
Aff*_*ffe 13
您可以使用该set2DigitYearStart()方法更改用于解释2位数据条目的世纪.
SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yy");
String aDate = "03/17/40";
Calendar cal = Calendar.getInstance();
cal.clear();
cal.set(Calendar.YEAR, 2000);
dateFormat.set2DigitYearStart(cal.getTime());
System.out.println(dateFormat.get2DigitYearStart());
System.out.println(dateFormat.parse(aDate));
Run Code Online (Sandbox Code Playgroud)
将于2040年3月17日发行.
从文档:
对于使用缩写年份模式("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日.在解析期间,只有由Character.isDigit(char)定义的正好两位数组成的字符串才会被解析为默认世纪.字面上解释任何其他数字字符串,例如一位数字符串,三位或更多位数字符串,或不是所有数字的两位数字符串(例如," - 1").所以使用相同的模式解析"01/02/3"或"01/02/003",如公元1月2日.同样,"01/02/-3"被解析为公元前1月2日.
它似乎没有提到任何调整[-80; +20]范围的方法.我怀疑你最好的选择是将两位数年份扩展为四位数形式:
datestr = datestr.replaceFirst("-(\\d{2})$", "-20$1");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4556 次 |
| 最近记录: |