Jak parsować datę z ostatnio zmodyfikowanego nagłówka HTTP?

Http ostatnio zmodyfikowany nagłówek zawiera datę w następującym formacie (przykład):
Wed, 09 Apr 2008 23:55:38 GMT
Jaki jest najprostszy sposób analizy java.util.Date z tego łańcucha?

Author: the_drow, 2009-12-18

5 answers

To powinno być całkiem 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

 62
Author: Shaun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-21 00:29:07

DateUtil.parseDate(dateString) z Apache http-components

(dziedzictwo: DateUtil.parseDate(dateString) (z Apache commons-httpclient))

Ma prawidłowy format zdefiniowany jako stała, która jest gwarantowana jako zgodna z protokołem.

 59
Author: Bozho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-12 16:17:26

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

Apache HttpClient dostarcza DateUtil 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 );

 23
Author: ralfstx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-21 13:43:52

Java.czas

Przy użyciu nowego Java API date and Time kod będzie po prostu:

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

The DateTimeFormatter Klasa predefiniuje stałą dla danego formatu w RFC_1123_DATE_TIME. Jak sama nazwa wskazuje, RFC 1123 definiuje ten format.

 12
Author: Stan Svec,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-06 05:44:43

Jeśli używasz URLConnection s, istnieje już przydatna metoda.

Zobacz URLConnection#getLastModified

Ta metoda przetwarza łańcuch daty i zwraca wartość milisekund. Następnie możesz z radością utworzyć Date z tą wartością.

 5
Author: Jin Kwon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-10 03:12:44