2011-06-20 12 views
13

w Javie, jak przeanalizować łańcuch daty zawierający literę, która nie reprezentuje wzorca?java SimpleDateFormat

 
"2007-11-02T14:46:03+01:00" 
 
String date ="2007-11-02T14:46:03+01:00"; 
String format = "yyyy-MM-ddTHH:mm:ssz"; 
new SimpleDateFormat(format).parse(date); 

Exception in thread "main" java.lang.IllegalArgumentException: Illegal pattern character 'T' 
    at java.text.SimpleDateFormat.compile(SimpleDateFormat.java:769) 
    at java.text.SimpleDateFormat.initialize(SimpleDateFormat.java:576) 
    at java.text.SimpleDateFormat.(SimpleDateFormat.java:501) 
    at java.text.SimpleDateFormat.(SimpleDateFormat.java:476) 
+1

Należy zauważyć, że pytanie o przetwarzanie dat ISO 8601 jest często zadawanym pytaniem. Wyszukaj "Java ISO 8601 date" lub coś podobnego, a znajdziesz wiele odpowiedzi. – Jesper

+0

Na przykład: http://stackoverflow.com/questions/6279647/converting-a-string-to-date-almost-done/6280206#6280206 – Jesper

Odpowiedz

5

momencie próbujemy analizować wydaje się być w ISO 8601 format. SimpleDateFormat Niestety nie obsługuje wszystkich tych samych specyfikatorów stref czasowych jak ISO 8601. Jeśli chcesz poprawnie obsługiwać wszystkie formularze określone w ISO, najlepszą rzeczą do zrobienia jest użycie Joda time.

Ten przykład jest prosto z user guide:

DateTime dt = new DateTime("2004-12-13T21:39:45.618-08:00"); 
+0

to nie działa, +01: 00 musi być +0100, aby joda działała. – user775187

+1

@user - masz rację, wersja ISO nie lubi dwukropków. Dobrą wiadomością jest to, że możesz przekazać wersję z dwukropkami bezpośrednio do konstruktora 'DateTime'. –

19

Można spróbować

String format = "yyyy-MM-dd'T'HH:mm:ssz"; 

referencyjny: od Javadoc

Tekst może być podawany przy wykorzystaniu apostrofów (') aby uniknąć interpretacji.

+1

Działa tylko wtedy, gdy ciąg zawiera "GMT". Po prostu: String date = "2007-11-02T14: 46: 03GMT + 01: 00"; –

+0

@Hendra, która jest prawdziwa lub musi to być "String date =" 2007-11-02T14: 46: 03 + 0100 ";' 'SimpleDateTime' jest dość ograniczone w takich sytuacjach i myślę, że jeśli (OP) don ' • mają dużą kontrolę nad danymi wejściowymi, najlepiej wykorzystają biblioteki takie jak czas joda. –

0
String testDate = "2007-11-02T14:46:03+01:00"; 
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz"); 
Date date = formatter.parse(testDate); 
System.out.println(date); 

Można spróbować podobna do powyższej

można użyć następujących link odsyłające

+0

nie, to wyrzuca ParseException – user775187

0

Jeśli nie dbają o strefie czasowej, można użyć tej metody.

public static Date convertToDate(String strDate) throws ParseException { 
    Date date = null; 
    if (strDate != null) { 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 
     date = sdf.parse(strDate); 
    } 
    return date; 
    } 

Nie wiem, czy to nadal użyteczne dla was, ale ja spotykamy się z tym samym problemem teraz, a po trochę wymyślić z tym.

Powiązane problemy