为什么格式化日期给上个世纪

时间:2013-04-09 12:56:10

标签: java date date-format simpledateformat

我有4位数的日期。我偶然发现了205​​0年后的输入。在我的申请中"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" ));
    }

任何有关解决此问题的帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:6)

根据API documentationSimpleDateFormat解析两位数的年份字段,因此结果是“在创建SimpleDateFormat实例之前的80年之前和之后的20年”。

如果您想要修改行为以更好地符合您的要求,您可以使用set2DigitYearStart方法设置日期映射到的100年期间的开头。

答案 1 :(得分:5)

来自SimpleDateFormat javadoc:

  

使用缩写的年份模式(“y”或“yy”)进行解析,   SimpleDateFormat必须解释相对于某些的缩写年份   世纪。它通过将日期调整到80年之前来实现   在创建SimpleDateFormat实例之后20年。

在你的情况下,1950年是在今天之前的80年内。

为了获得正确的日期(2050年),您必须致电SimpleDateFormat.set2DigitYearStart(Date)