2016-01-27 183 views
2

我嘗試解析字符串的日期:Java:How to Parse String to Date correct?

String dateString = "Fr, 1. Jan"; 
DateFormat format = new SimpleDateFormat("EE, d. MMM"); 
Date date = null; 
try { 
    date = format.parse(dateString); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
System.out.println(format.format(date)); 

而我得到的輸出是這些:

Do, 1. Jan 

爲什麼會這樣,爲什麼不是它作爲輸出相同輸入?

+0

我想天名至少需要3個字母。 – m0skit0

+0

也許它與你的時區有關,但是也應該改變1. Jan應該改變(尤其是因爲1月1日不是Donnerstag)......試着打印出完整的日期並告訴我們,你得到了什麼。 – ctst

+0

僅供參考:如果使用'Locale.GERMAN'作爲第二個參數初始化'SimpleDateFormat',則可以重現。 –

回答

3

你忘記了一年。當你解析它時,你會在1970年(星期五將被忽略)。當你解析時,你會解析日期1970年1月1日,這是一個星期四。這應該工作:

String dateString = "Fr, 1. Jan"; 
    DateFormat format = new SimpleDateFormat("EE, d. MMM"); 
    Date date = null; 
    try { 
     date = format.parse(dateString); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    date.setYear(new Date().getYear()); //alternativ: date.setYear(2016); 

    System.out.println(date); 
    System.out.println(format.format(date)); 
2

「Do」是「Donnerstag」的前兩個字母,它是德文的「Thursday」。以你的姓氏「Baum」(德語爲「樹」)來判斷,我猜這不是巧合。另外,1970-01-01是一個星期四,如果你沒有指定年份,你會得到開始的時代。

日期格式「E」是一個單詞的星期幾 - 您指定的「E」越多,該單詞的字母越多; 「EE」會在德語語言環境中將「星期四」呈現爲「Do」,可疑是您的默認語言環境。

你的代碼,對我來說是爆炸,但這種類似的代碼生成,你得到的結果相同:

String dateString = "Fri, 1. Jan"; 
DateFormat format = new SimpleDateFormat("EEE, d. MMM"); 
Date date = format.parse(dateString); 
DateFormat format2 = new SimpleDateFormat("EE, d. MMM", Locale.GERMAN); 
System.out.println(format2.format(date)); 

輸出:

Do, 1. Jan 
2

Java中的Date始於01-01-1970。 1970年1月1日是星期四,因此它把這一天解釋爲星期四而不是星期五。你將不得不增加一年才能保證它是星期五。