2012-04-01 6 views
5

Ich schrieb eine einfache Util-Methode, um eine String in Java zu util.Date zu konvertieren. Was ich nicht in der Lage bin, ist herauszufinden, warum das Verfahren für den ersten Eingang arbeitet, und nicht für die zweite gegeben, dass die Eingänge sind identisch:Inkonsistente ParseExeption mit Datenformat in Java

Code:

package util; 

import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class StringToDate { 

    public Date getDateFromString(String strDate, String dateFormat) { 

     DateFormat df = new SimpleDateFormat(dateFormat); 
     Date date = null; 

     try { 

      date = df.parse(strDate); 

     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 

     System.out.println(date); 

     return date; 
    } 

    public static void main(String[] args) { 

     StringToDate s2d = new StringToDate(); 

     s2d.getDateFromString("12-18-11, 10:36 AM","MM-dd-yy, hh:mm a"); 
     s2d.getDateFromString("02-04-12, 01:17 PM","MM-dd-yy, hh:mm a"); 
    } 
} 

Ausgang:

Sun Dec 18 10:36:00 CET 2011 
null 
java.text.ParseException: Unparseable date: "02-04-12, 01:17 PM" 
    at java.text.DateFormat.parse(DateFormat.java:337) 
    at util.StringToDate.getDateFromString(StringToDate.java:17) 
    at util.StringToDate.main(StringToDate.java:33) 

Logisch sollte der Ausgang Sat Feb 04 13:17:00 CET 2012 durch den ersten Ausgang gegangen sein. Warum wird ParseException geworfen?

EDIT: Die folgenden zwei Zeilen korrekt funktionieren:

s2d.getDateFromString("02-04-12", "MM-dd-yy"); 
s2d.getDateFromString("01:17 PM", "hh:mm a"); 

Ausgang:

Sat Feb 04 00:00:00 CET 2012 
Thu Jan 01 13:17:00 CET 1970 

Aber die Ausnahme geschieht, wenn ich versuche, zusammen sowohl Datum und Zeit zu analysieren.

+0

Ich bin verwirrt - Es funktioniert gut für mich. –

+0

Ich auch - in welcher Kultur bist du? Danke für die Aufnahme eines kurzen, aber kompletten Programms, wohlgemerkt :) –

+0

@JonSkeet: Ich verstehe nicht, was du meinst mit "in welcher Kultur bist du?", Aber danke für das Kompliment! Funktioniert das Programm für Sie? Ich verwende JDK 1.6 (1.6.0.11). Ich habe versucht, Eclipse und sogar die klassische Befehlsaufforderung Route des oben genannten [SSCCE] (http://homepage1.nifty.com/algafield/sscce.html). Trotzdem, dieselbe Ausnahme; gleiche Inkonsistenz. Hilfe! – SNag

Antwort

7

Haben Sie ein Leerzeichen oder ein anderes Unicode-Leerzeichen irgendwo in Ihrer Datumszeichenfolge oder in der Formatmaske?

Ich konnte Ihren Fehler reproduzieren, wenn ich eines der Leerzeichen in der zweiten Ihrer Datumszeichenfolgen durch ein geschütztes Leerzeichen ersetzt, z. B. Unicode character 160.

+0

Ausgezeichneter Fang !! Ja, das war es! Oh mein! Die Datumszeichenfolge im obigen Programm wurde tatsächlich von einem externen Text kopiert, den ich analysieren wollte.Wie kann man solche nicht schadhaften Räume eliminieren und durch tatsächlichen Leerraum ersetzen? – SNag

+1

+1 Weil ich jetzt mit meinem Leben weitermachen kann. Ich hätte nicht schlafen können, bis ich wusste, was hier wirklich los war :) –

+0

Gefunden, wonach ich suchte: 'cleanString = dirtyString.replace (" \ u00a0 "," ")' oder 'cleanString = dirtyString .replace (" ", "") 'beseitigt die parse-exception-verursachende **   **! :) – SNag