2009-12-18 7 views

risposta

59

Questo dovrebbe essere abbastanza vicino

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 quasi corretta, il 'hh' dovrebbe essere' HH', come le ore sono 0-23. – notnoop

+0

Buona cattura, ora fissa – Shaun

+0

Avevo anche il fuso orario "ZZZ" invece di "zzz". Spero che lo faccia. Se hai ancora problemi puoi fare riferimento alla documentazione collegata sopra. – Shaun

59

DateUtil.parseDate(dateString) da HTTP Apache-componenti

(legacy: DateUtil.parseDate(dateString) (da Apache Commons-HttpClient))

Ha la formato corretto definito come costante, che garantisce la conformità al protocollo.

+0

+1 mi ha picchiato :) – ZoogieZork

+1

BTW, commons-httpclient è stato sostituito da org.apache.httpcomponents: httpclient. –

+2

La classe è ora 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 definisce tre diversi formati di data che un client conforme deve capire.

L'Apache HttpClient fornisce una DateUtil che è conforme alla 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 minore nel caso in cui le persone si confondano: il formato della data RFC è 1123, a cui si fa riferimento da RFC 2616 qui: http://www.w3.org/Protocols/rfc2616 /rfc2616-sec3.html#sec3.3.1 – daveb

+0

"il formato della data RFC è 1123" che si riferisce a RFC 822 – Raedwald

+1

@Raedwald che a sua volta è sostituito da [RFC 2822] (https://www.ietf.org/rfc/ rfc2822.txt). – iain

5

Se stai usando URLConnection s, c'è già un metodo pratico.

Vedi URLConnection#getLastModified

Questo metodo analizza la stringa di data e restituisce un valore millisecondi. Quindi puoi creare felicemente un Date con quel valore.

+1

Si noti che questo metodo utilizza il metodo deprecato 'Date.parse', almeno a partire da Oracle JDK 7, che _sembra_ per supportare tutti e tre HTTP 1.1 [Data completa] (http : //www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1) formati. –

7

java.time

Quando si utilizza la nuova Java Date and Time API il codice sarebbe semplicemente:

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

Il DateTimeFormatter classe pre-definisce una costante per quel particolare formato RFC_1123_DATE_TIME. Come suggerisce il nome, RFC 1123 definisce tale formato.

+1

Vedere [codice live in IdeOne.com] (http://ideone.com/Fzh9Xw). –

Problemi correlati