这是我的代码:

private static final DateFormat DATE_FORMAT = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH);
....
private static Date parseIfModifiedSince(HttpServletRequest request) {
    String lastModifiedHeader = "";
    try {
        lastModifiedHeader = request.getHeader(IF_MODIFIED_SINCE);
        return !StringUtils.isEmpty(lastModifiedHeader) ? DATE_FORMAT.parse(lastModifiedHeader) : null;
    } catch (Exception ex) {
        log.warn("Error while parsing If-Modified-Since date: \"" + lastModifiedHeader+"\"", ex);
        return null;
    }
}


有时我会看到一个例外:

WARN ru.planeta.web.res.ResourcesController 2013-03-29 20:16:58,635: Error while parsing If-Modified-Since date: "Fri, 29 Mar 2013 16:16:28 GMT"
java.lang.NumberFormatException: multiple points


我在代码中找不到任何问题。我怎么了

最佳答案

SimpleDateFormat声明为类级变量会使您面临该问题,因为它不是线程安全的。我建议您每次需要时都创建一个新的SimpleDateFormat对象,并将其仅分配给方法中的局部变量。

关于java - 日期解析魔术,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15708089/

10-10 17:12