2017-02-23 81 views
-2
public static void main(String[] args) { 
     Date now = new Date(); 

     String dateString = now.toString(); 
     System.out.println(" 1. " + dateString); 

     SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy"); 

     try { 
      Date parsed = format.parse(dateString); 
      System.out.println(" 2. " + parsed.toString()); 
     } catch (ParseException pe) { 
      System.out.println("ERROR: Cannot parse \"" + dateString + "\""); 
     } 

     System.out.println(" 3. " + format.format(now)); 
    } 

打印控制檯:代替java SimpleDateFormat?

1. Thu Feb 23 17:14:51 CET 2017 
ERROR: Cannot parse "Thu Feb 23 17:14:51 CET 2017" 
3. jeu. févr. 23 05:14:51 CET 2017 

1. Thu Feb 23 17:14:51 CET 2017 
2. Thu Feb 23 17:14:51 CET 2017 
3. jeu. févr. 23 05:14:51 CET 2017 
+2

您沒有。 3表示您的系統區域設置爲法語,因此格式化程序無法識別「Thu Feb」,因爲它只需要法文名稱。 – Thomas

+2

Bonjour,爲什麼你仍然在使用老式的Date類和SimpleDateFormat類嗎? 'java.time'中的新類(自Java 8以來)具有'toString'和'parse'方法,這些方法對默認格式和區域設置保持一致,這樣可以爲您節省像這樣的問題。 –

回答

3

它看起來像你的默認LocaleFRENCH,由於SimpleDateFormat使用它,如果你不指定一個又一個,你無法成功解析英文abreviations,如ThuFeb

但是,您可以指定使用ENGLISHLocale這樣的:

SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH); 
0

您已經運行到Java中的現在過時Date類的許多疾病之一。

聲音和簡單的修復是轉換到Java 8日期和時間類。與Date最相符的新課程是Instant。有了這個類代碼變爲:

Instant now = Instant.now(); 

    String dateString = now.toString(); 
    System.out.println(" 1. " + dateString); 

    try { 
     Instant parsed = Instant.parse(dateString); 
     System.out.println(" 2. " + parsed.toString()); 
    } catch (DateTimeParseException e) { 
     System.out.println("ERROR: Cannot parse \"" + dateString + "\""); 
    } 

我從你的榜樣冷落3.。當然,可以用任何你可以想象的方式來設置Instant的格式,但是如果我們只想要與toString方法相同的輸出,那麼現在我覺得它不值得。相反,我想表明,對於這種情況,你根本不需要格式。該代碼打印:

1. 2017-02-23T17:07:19.775Z 
2. 2017-02-23T17:07:19.775Z 

您會注意到它打印在UTC時間。如果您想要改爲本地時區,只需使用ZonedDateTime而不是Instant。代碼的其餘部分是完全一樣的,但現在我的電腦上輸出是:

1. 2017-02-23T18:07:19.852+01:00[Europe/Berlin] 
2. 2017-02-23T18:07:19.852+01:00[Europe/Berlin] 

當然有可能產生像你還不服的語言環境中的新類得到一個錯誤。據我所見,你將不得不明確指定不同意的地區。所以你不會輕易做到這一點。