我有4位数的日期。我偶然发现了2050年后的输入。在我的申请中"0150"
表示January 01 2050
。但是当我格式化时,它返回以下输出。
Sun Jan 01 00:00:00 PKT 1950
public static Date getFormatDate( String newformat, String dateValue ) throws Exception {
try {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat( newformat );
java.util.Date newdate = simpleDateFormat.parse( dateValue );
return newdate;
}
catch( Exception e ) {
System.out.println( "Exception in converting date format --->" + e );
throw e;
}
}
public static void main( String[] args ) throws Exception {
System.out.println(getFormatDate( "MMyy", "0150" ));
}
任何有关解决此问题的帮助都将受到高度赞赏。
答案 0 :(得分:6)
根据API documentation,SimpleDateFormat
解析两位数的年份字段,因此结果是“在创建SimpleDateFormat实例之前的80年之前和之后的20年”。
如果您想要修改行为以更好地符合您的要求,您可以使用set2DigitYearStart
方法设置日期映射到的100年期间的开头。
答案 1 :(得分:5)
来自SimpleDateFormat javadoc:
使用缩写的年份模式(“y”或“yy”)进行解析, SimpleDateFormat必须解释相对于某些的缩写年份 世纪。它通过将日期调整到80年之前来实现 在创建SimpleDateFormat实例之后20年。
在你的情况下,1950年是在今天之前的80年内。
为了获得正确的日期(2050年),您必须致电SimpleDateFormat.set2DigitYearStart(Date)。