2009-12-18 9 views

Respuesta

59

Esto debería ser bastante cerca

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 casi correcto, el 'hh' debe ser' HH', ya que las horas son 0-23. – notnoop

+0

Buena captura, corregida ahora – Shaun

+0

También tuve la zona horaria "ZZZ" en lugar de "zzz". Espero que eso lo haga. Si todavía tiene problemas, puede consultar la documentación vinculada anteriormente. – Shaun

59

DateUtil.parseDate(dateString) de Apache HTTP-componentes

(legacy: DateUtil.parseDate(dateString) (de Apache Commons-httpclient))

Tiene la formato correcto definido como una constante, que se garantiza que cumple con el protocolo.

+0

+1 me gané :) – ZoogieZork

+1

BTW, commons-httpclient ha sido reemplazado por org.apache.httpcomponents: httpclient. –

+2

La clase ahora es 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 define tres formatos de fecha diferentes que debe entender un cliente conforme.

El Apache HttpClient proporciona una DateUtil que cumpla con la norma:

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

Solo un punto menor en caso de que la gente se confunda: el formato de fecha RFC es 1123, al que se hace referencia desde RFC 2616 aquí: http://www.w3.org/Protocols/rfc2616 /rfc2616-sec3.html#sec3.3.1 – daveb

+0

"el formato de fecha RFC es 1123" que a su vez se refiere a RFC 822 – Raedwald

+1

@Raedwald que a su vez es reemplazado por [RFC 2822] (https://www.ietf.org/rfc/ rfc2822.txt). – iain

5

Si está utilizando URLConnection s, ya existe un método práctico.

Ver URLConnection#getLastModified

Este método analiza la cadena de fecha y devuelve un valor de milisegundos. Entonces puedes crear felizmente un Date con ese valor.

+1

Tenga en cuenta que este método utiliza el método 'Date.parse' en desuso, al menos a partir de Oracle JDK 7, que _ parece_ para admitir los tres HTTP 1.1 [Fecha completa] (http : //www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1) formatos. –

7

java.time

Cuando se utiliza el nuevo Java Date and Time API el código sería simplemente:

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

El DateTimeFormatter clase pre-define una constante para que formato particular en RFC_1123_DATE_TIME. Como su nombre indica, RFC 1123 define ese formato.

+1

Ver [código en vivo en IdeOne.com] (http://ideone.com/Fzh9Xw). –

Cuestiones relacionadas