2016-08-25 44 views
0

我有一个关于Class SimpleDateFormat的问题。 我想转换日期字符串的格式。 日期是21.11.2011,我希望它转换为111121.Java SimpleDateFormat解析奇数结果

这是我的代码:

public class Main { 

private static final SimpleDateFormat oldSimpleDateFormat = new SimpleDateFormat("dd.MM.YYYY"); 
private static final SimpleDateFormat newSimpleDateFormat = new SimpleDateFormat("YYMMdd"); 
private static String oldDate = "21.11.2011"; 
private static Date myDate = oldSimpleDateFormat.parse(oldDate, new ParsePosition(0)); 
private static String newDate = newSimpleDateFormat.format(myDate); 

public static void main(String[] args){ 
    System.out.println(myDate); 
    System.out.println(newDate); 
} 
} 

在控制台的结果是周一年1月3日00:00:00 CET 2011 110103. 因此,格式化部分正常工作,但解析部分不符合预期。

+0

输入字符串是oldDate,其中包含21.11.2011 – Benjamin

回答

1

当您应该使用yyyy(小写)时,您正在使用YYYY(大写)。

Y表示“周年”。 y表示“年份”。

+0

是的,就是这样。非常感谢你! – Benjamin

+0

请仅VTC。这里有一个可能的重复:http://stackoverflow.com/questions/27739514/simpledateformatdd-mmm-yyyy-printing-year-one-year-ahead?noredirect=1&lq=1 –

+0

嗯..直观地,你会假设使用'YYYY '无关紧要,因为这个具体日期离年底还有很远的距离。通常情况下,您会在十二月底或一月份的日期开始时看到这些错误(就像在建议的副本中那样)。 –

0

检查SimpleDateFormat的javadoc。这通常是用于不同事情的大写/小写字母的问题。在这种情况下,大写字母Y表示“周年”(不管是什么),小写字母y表示“年份”。将Y's更改为y并且它可以工作。