【发布时间】:2010-12-28 03:50:14
【问题描述】:
HTTP Last-Modified 标头包含以下格式的日期(示例):Wed, 09 Apr 2008 23:55:38 GMT
从此字符串中解析 java.util.Date 的最简单方法是什么?
【问题讨论】:
标签: java http date http-headers
HTTP Last-Modified 标头包含以下格式的日期(示例):Wed, 09 Apr 2008 23:55:38 GMT
从此字符串中解析 java.util.Date 的最简单方法是什么?
【问题讨论】:
标签: java http date http-headers
当使用新的Java Date and Time API 时,代码将是:
ZonedDateTime zdt = ZonedDateTime.parse("Wed, 09 Apr 2008 23:55:38 GMT", DateTimeFormatter.RFC_1123_DATE_TIME);
DateTimeFormatter 类为RFC_1123_DATE_TIME 中的特定格式预定义了一个常量。顾名思义,RFC 1123 定义了该格式。
【讨论】:
RFC 2616 定义了符合标准的客户必须理解的三种不同日期格式。
Apache HttpClient 提供了一个符合标准的 DateUtil:
Date date = DateUtils.parseDate( headerValue );
【讨论】:
DateUtil.parseDate(dateString) 来自 apache http-components
(旧版:DateUtil.parseDate(dateString)(来自 apache commons-httpclient))
它具有定义为常量的正确格式,保证符合协议。
【讨论】:
org.apache.http.client.utils.DateUtils, httpclient-4.3.3
这应该很接近
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);
【讨论】:
parse 时对其进行同步(它们不是线程安全的)。跨度>
ParseException,请改用new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US)
如果你使用URLConnections,已经有一个方便的方法。
看 URLConnection#getLastModified
此方法解析日期字符串并返回毫秒值。然后您可以愉快地创建一个具有该值的Date。
【讨论】:
Date.parse 方法,至少从 Oracle JDK 7 开始,它似乎支持所有三种 HTTP 1.1 Full Date 格式。跨度>