2009-12-18 14 views

Odpowiedz

59

To powinno być dość blisko

String dateString = "Wed, 09 Apr 2008 23:55:38 GMT"; 
SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz"); 
Date d = format.parse(dateString); 

SimpleDateFormat

+3

+1 prawie poprawne, 'hh' powinno być' HH', jako że godziny to 0-23. – notnoop

+0

Dobry połów, naprawiony teraz – Shaun

+0

Miałem także strefę czasową "ZZZ" zamiast "zzz". Mam nadzieję, że to zrobi. Jeśli nadal masz problemy, możesz odwołać się do dokumentacji powiązanej powyżej. – Shaun

59

DateUtil.parseDate(dateString) z Apache-komponentów

(Legacy: DateUtil.parseDate(dateString) (od Apache Commons-httpclient))

To ma poprawny format zdefiniowany jako stała, co gwarantuje zgodność z protokołem.

+0

+1 bicie mnie do tego :) – ZoogieZork

+1

BTW, commons-httpclient został zastąpiony przez org.apache.httpcomponents: httpclient. –

+2

Ta klasa to teraz org.apache.http.impl.cookie.DateUtils http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/cookie/DateUtils.html – daveb

23

RFC 2616 definiuje trzy różne formaty dat, które musi zrozumieć zrozumiały klient.

Apache HttpClient zapewnia DateUtil który jest zgodny ze standardem:

https://hc.apache.org/httpcomponents-client-4.3.x/httpclient/apidocs/org/apache/http/client/utils/DateUtils.html

https://apache.googlesource.com/httpclient/+/4.3.x/httpclient/src/main/java/org/apache/http/client/utils/DateUtils.java

Date date = DateUtils.parseDate(headerValue);

+2

Tylko pomniejszy punkt na wypadek, gdyby ludzie się pogubili: format daty RFC to 1123, o którym mowa w RFC 2616 tutaj: http://www.w3.org/Protocols/rfc2616 /rfc2616-sec3.html#sec3.3.1 – daveb

+0

"format daty RFC to 1123", który sam w sobie odnosi się do RFC 822 – Raedwald

+1

@Raedwald, który sam został zastąpiony przez [RFC 2822] (https://www.ietf.org/rfc/ rfc2822.txt). – iain

5

Jeśli używasz URLConnection s, nie jest już przydatny sposób.

Zobacz URLConnection#getLastModified

Metoda ta analizuje ciąg daty i zwraca wartość milisekund. Następnie możesz z powodzeniem utworzyć z tą wartością Date.

+1

Należy zauważyć, że ta metoda używa nieaktualnej metody "Date.parse", przynajmniej od Oracle JDK 7, która umożliwia interpretację wszystkich trzech protokołów HTTP 1.1 [Pełna data] (http : //www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1) formaty. –

7

java.time

Przy użyciu nowego Java Date and Time API kod byłoby po prostu:

ZonedDateTime zdt = ZonedDateTime.parse("Wed, 09 Apr 2008 23:55:38 GMT", DateTimeFormatter.RFC_1123_DATE_TIME); 

DateTimeFormatter klasa wstępnie określa stałą dla danego formatu w RFC_1123_DATE_TIME. Jak sama nazwa wskazuje, RFC 1123 definiuje ten format.

+1

Zobacz [kod na żywo w IdeOne.com] (http://ideone.com/Fzh9Xw). –

Powiązane problemy