2010-03-16 11 views
14

Java'da bir tarihin RFC 2822 dizgi temsilini ayrıştırmam gerekiyor. Bir örnek dize buradadır:JAVA'da Ayırma RFC 2822 tarihi

Cts, 2010 11:29:05 -0800

O yüzden ben her şeyi doğru yaptığını emin olmak istedim ve garip içine aday olacağını çok tiksindirici görünür 13 Mar sonraki bir tarihte sorunlar, ben beklemiyorum, ya AM-PM/Askeri zaman sorunları, UTC zamanı sorunlar üzerinden sorunları yanlış yorumlandığı vs ...

teşekkürler!

+3

'java.text.SimpleDateFormat' kullanmayı denediniz mi? – skaffman

+0

Kullanılacak doğru olana benziyor, doğru format dizgesinin ne olduğu konusunda endişeliydim, dağınık olması kolay bir şeymiş gibi görünüyordu. Bu, RFC 2822 için doğru dize gibi görünüyor: "EEE, d MMM yyyy HH: mm: ss Z" (aşağıdaki cevaba göre) –

+1

'd' değil' dd'. –

cevap

19

Bu (SimpleDateFormat kullanarak) sormak gelmez Ne çabuk kod

String rfcDate = "Sat, 13 Mar 2010 11:29:05 -0800"; 
String pattern = "EEE, dd MMM yyyy HH:mm:ss Z"; 
SimpleDateFormat format = new SimpleDateFormat(pattern); 
Date javaDate = format.parse(rfcDate); 

//Done. 

PS olduğunu. Burada istisnalar ve eşzamanlılık ile ilgilenmedim (SimpleDateFormat ayrıştırma sırasında senkronize değil). Başvurunuz İngilizce dışında başka bir dil kullanıyorsa

+0

kullanım Yerelin Belirtilmesi son kabul edilebilir değerler – rajadilipkolli

19

, alternatif bir SimpleDateFormat kurucu kullanarak tarih ayrıştırma/biçimlendirme için yerel zorlamak isteyebilirsiniz:

String pattern = "EEE, dd MMM yyyy HH:mm:ss Z"; 
SimpleDateFormat format = new SimpleDateFormat(pattern, Locale.ENGLISH); 
+4

için bu bağlantıyı http://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html kesinlikle gereklidir. Locale için android javadoc, bilgisayardan bilgisayara iletişim için Locale.US uygulamasını önerir. [Link] (https://developer.android.com/reference/java/util/Locale.html) –

+0

+1 Locale.ROOT da iyi bir seçim olacaktır, ancak tüm sistemlerde mevcut değildir. – Jules

+0

@jasongilbert Neden Locale'nin kesinlikle gerekli olduğunu söylediğinizi açıklayabilir misiniz? Dokümanlara göre: http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html - ama belki "gerekliyse ..." demek istediniz. "if" ile ilgilendiğim ... –

4

unutmayın [gün- o haftalık ","], RFC-2822'de isteğe bağlıdır, dolayısıyla önerilen örnekler tüm RFC-2822 tarih formatlarını kapsamaz. Ek olarak, RFC-822 tarih türü, "Z" biçim belirticisi tarafından kapsanmayan birçok farklı saat dilimi gösterimine (obs-zone) izin verdi. Kullanılacak desen belirlemek için | - '+'

Ben "" kolay bir yolu yok, dışarı arayan başka yoktur sanırım ve.

+1

+1. Çalıştığım bir şey bulana kadar varyasyonları denemeye devam etmek için çeşitli desenlerle deneme/yakalama şelalesi yapıyorum. –

+0

sadece 'haftanın günü' opsiyonel değildir, ayrıca günün saati saniye cinsinden isteğe bağlı olarak bildirilir: 'gün-saat = saat ':' dakika [':' saniye '] –