2015-11-13 63 views
2

我想將兩個單獨的字符串"1982""SEP"解析爲一個java.time.YearMonth對象。解析爲YearMonth

java.time.YearMonth.parse("1978 SEP", java.time.format.DateTimeFormatter.ofPattern("yyyy LLL")) 

給我

java.time.format.DateTimeParseException: Text '1978 SEP' could not be parsed at index 5 
    at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949) 
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851) 
    at java.time.YearMonth.parse(YearMonth.java:295) 

回答

7

有3個(可能2)問題在這裏:

  • 您的區域設置不是英語,所以"SEP"不能被理解爲九月。這可以通過將英語語言環境設置爲格式化程序來解決。
  • DateTimeFormatter默認情況下區分大小寫,因此您需要構建不區分大小寫的格式化程序。
  • 您不應該使用"L"令牌,而是使用"M"代替:請參閱this question

下面的工作:

DateTimeFormatter formatter = new DateTimeFormatterBuilder() 
            .parseCaseInsensitive() 
            .appendPattern("yyyy MMM") 
            .toFormatter(Locale.ENGLISH); 
System.out.println(YearMonth.parse("1978 SEP", formatter)); 
0

我想你的代碼,如果你採取了Java打印日期,它使用 大寫在每月的第一個字母看看(我的執行) 只需鍵入Sep而不是sep,並在字符串模式中使用MMM而不是LLL。

在使用字符串模式解析日期之前,請查看它們如何打印在系統輸出上,然後相應地編寫您的字符串模式。

這個例子只適用於英語語言環境,在現場意大利字符串日期模式是不同的充,所以如果您更改語言環境,我建議你修改解析器

嘗試{

  java.time.YearMonth.parse("1978 Sep", java.time.format.DateTimeFormatter.ofPattern("yyyy MMM")); 

     } 

     catch(DateTimeParseException e) 

     { 

      e.printStackTrace(); 

     } 

}