2016-03-19 7 views
5

Próbuję przeanalizować datę formatu dd-MMM-yyyy.Wyjątek java.time.format.DateTimeParseException dla formatu dd-MMM-rrrr

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

    } 
} 

To rzuca następujący wyjątek

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) 

Analizuje grzywny dla formatu dd-MM-yyyy ale nie z formatem dd-MMM-yyyy. Zmęczyłem także ustawienie Locale.US, ale w tym przypadku też się nie udało.

Odpowiedz

5

Powód jest taki, że w parsowaniu rozróżniana jest domyślnie wielkość liter, a formater nie rozpoznaje "jan". Rozpoznaje tylko "Jan".

można skonstruować bez uwzględniania wielkości liter parsera przy użyciu DateTimeFormatterBuilder i nazywając parseCaseInsensitive():

Zmienia styl składniowy być przypadek niewrażliwe na pozostałej części formatyzatora.

Parsowanie może być rozróżniane lub nie jest rozróżniana wielkość liter - domyślnie wielkość liter jest rozróżniana. Ta metoda umożliwia zmianę ustawienia rozróżniania wielkości liter podczas analizowania.

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

Co za bałagan. A Oracle odmawia tutaj usprawnień, zobacz [to JDK-bug-log] (https://bugs.openjdk.java.net/browse/JDK-8141245) –

Powiązane problemy