2011-06-20 12 views
13

, bir deseni temsil etmeyen bir harf içeren bir tarih dizgisini nasıl ayrıştırılır?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

Not: ISO 8601 tarihlerini ayrıştırma sorusu, sık sorulan ve yanıtlanan bir sorudur. "Java ISO 8601 tarihi" veya benzeri bir şey arayın ve birçok cevap bulacaksınız. – Jesper

+0

Örneğin: http://stackoverflow.com/questions/6279647/converting-a-string-to-date-almost-done/6280206#6280206 – Jesper

cevap

5

Eğer ISO 8601 format içinde göründüğünden ayrıştırmak için çalışıyoruz zaman için link aşağıdaki kullanabilirsiniz yukarıdaki

benzer deneyebilirsiniz. SimpleDateFormat ne yazık ki, ISO 8601 gibi tüm zaman dilimi belirleyicilerini desteklemiyor. Eğer ISO'da belirtilen tüm formları düzgün bir şekilde ele almak istiyorsanız, yapılacak en iyi şey Joda time'u kullanmaktır.

Bu örnek düz user guide dışındadır: Eğer zaman dilimine umurumda değil, bu yöntemi kullanabilirsiniz

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

'u atar, bu işe yaramaz, +01: 00, joda'nın çalışması için +0100 olmalıdır. – user775187

+1

@user - haklısınız, ISO sürümü kolonları sevmiyor. İyi haber, sürümü doğrudan "DateTime" yapıcısına doğru kolonlarla iletebilirsiniz. –

19

Sen

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

Referans deneyebilirsiniz: Javadoc

Metin alıntı yapılabilir yorumunu önlemek için tek tırnak (') kullanarak.

+1

Yalnızca dize 'GMT' içeriyorsa çalışır. Aynen böyle: String date = "2007-11-02T14: 46: 03GMT + 01: 00"; –

+0

@Hendra, doğru veya 'String date = "olmalıdır." 2007-11-02T14: 46: 03 + 0100 ";' SimpleDateTime', bu tür durumlarda oldukça sınırlıdır. Girdi üzerinde çok fazla kontrole sahip olursak, joda zamanı gibi kütüphaneler en iyi şekilde çalışır. –

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

Sen referans

+0

no, bu ParseException – user775187

0

.

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; 
    } 

hala sizin için yararlı olup olmadığını bilmiyorum, ama şimdi aynı sorunla karşılaşmak ve biraz sonra ben böyle bir cevap.

İlgili konular