2016-03-19 23 views
5

日付をdd-MMM-yyyyという形式で解析しようとしています。dd-MMM-yyyy形式のjava.time.format.DateTimeParseException

package com.company; 

import javax.swing.text.DateFormatter; 
import java.time.format.DateTimeFormatter; 

import java.time.*; 
import java.util.Locale; 

public class Main { 

    public static void main(String[] args) { 
     // write your code here 
     MonthDay m; 
     Locale.setDefault(Locale.ENGLISH); 
     DateTimeFormatter dTF = DateTimeFormatter.ofPattern("dd-MMM-yyyy"); 
     String dateString = "12-jan-1900"; 

     try 
     { 
      LocalDate ddd = LocalDate.parse(dateString,dTF); 
      System.out.println(ddd.toString()); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

     //System.out.println(d.toString()); 

    } 
} 

それはdd-MM-yyyy形式の罰金解析しますが、dd-MMM-yyyy形式で失敗し、次の例外

java.time.format.DateTimeParseException: Text '12-jan-1900' could not be parsed at index 3 
    at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949) 
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851) 
    at java.time.LocalDate.parse(LocalDate.java:400) 
    at com.company.Main.main(Main.java:20) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 

をスローします。私もLocale.USの設定に疲れましたが、その場合も失敗しました。

答えて

5

なぜなら、解析はデフォルトで大文字と小文字が区別され、フォーマッタは"jan"を認識しないからです。それは"Jan"のみを認識します。

あなたはDateTimeFormatterBuilderを使用してparseCaseInsensitive()を呼び出すことによって、大文字と小文字を区別しないパーサを構築することができます。

は、フォーマッタの残りの大文字と小文字を区別する解析スタイルを変更します。

解析では、大文字と小文字を区別することも、区別しないこともできます。デフォルトでは、大文字と小文字が区別されます。このメソッドを使用すると、解析の大文字と小文字の区別の設定を変更できます。

DateTimeFormatter dTF = 
    new DateTimeFormatterBuilder().parseCaseInsensitive() 
            .appendPattern("dd-MMM-yyyy") 
            .toFormatter(); 
+1

どのような混乱。 Oracleはここでの改善を拒否しています。[このJDK-bug-log](https://bugs.openjdk.java.net/browse/JDK-8141245)を参照してください。 –