2016-03-19 4 views
5

Ich versuche, Datum von dd-MMM-yyyy Format zu analysieren.java.time.format.DateTimeParseException für dd-MMM-JJJJ-Format

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()); 

    } 
} 

Es wirft die folgende Ausnahme

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) 

Es analysiert für dd-MM-yyyy Format in Ordnung, aber nicht mit dd-MMM-yyyy Format. Ich müde Einstellung Locale.US auch, aber es scheiterte auch in diesem Fall.

Antwort

5

Der Grund ist, dass beim Parsen standardmäßig die Groß-/Kleinschreibung beachtet wird und der Formatierer "jan" nicht erkennt. Es würde nur "Jan" erkennen.

Sie können einen Groß- und Kleinschreibung Parser konstruieren, indem ein DateTimeFormatterBuilder und rief parseCaseInsensitive() mit:

ändern den Parse-Stil Groß- und Kleinschreibung für den Rest des Formatierers zu sein.

Beim Parsen kann die Groß-/Kleinschreibung beachtet werden oder die Groß-/Kleinschreibung - standardmäßig wird die Groß-/Kleinschreibung beachtet. Diese Methode ermöglicht die Änderung der Groß- und Kleinschreibung der Parsing-Einstellung.

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

Was für ein Chaos. Und Oracle lehnt hier Verbesserungen ab, siehe [dieses JDK-Bug-Log] (https://bugs.openjdk.java.net/browse/JDK-8141245) –

Verwandte Themen