2

我有 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" ));
    }

解决此问题的任何帮助将不胜感激。

4

2 回答 2

6

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

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

于 2013-04-09T13:02:09.410 回答
5

从 SimpleDateFormat javadoc :

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

就您而言,1950 年是今天之前的 80 年之内。

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

于 2013-04-09T13:01:43.907 回答