7

我有一个要求,在将日期索引到 Solr 之前,可以以下列格式传递日期。以下是通过日期的示例

String dateStr = "2012-05-23T00:00:00-0400";
String dateStr1 = "May 24, 2012 04:57:40 GMT";
String dateStr2 = "2011-06-21";
    
标准 Solr 格式是"yyyy-MM-dd'T'HH:mm:ss'Z'"

我尝试过 SimpleDateFormat 但无法编写通用程序来支持各种格式。它最终抛出解析异常。

我也尝试了 joda time,但到目前为止在 UTC 转换中还没有成功。

public static String toUtcDate(final String iso8601) {
        DateTime dt = ISO_PARSE_FORMAT.parseDateTime(iso8601);
        DateTime utcDt = dt.withZone(ZONE_UTC);
        return utcDt.toString(ISO_PRINT_FORMAT);
    }

是否有一个标准库来实现这一点?

任何指针将不胜感激。

谢谢

4

2 回答 2

14

我只是尝试各种格式,直到获得成功:

public static String toUtcDate(String dateStr) {
    SimpleDateFormat out = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
    // Add other parsing formats to try as you like:
    String[] dateFormats = {"yyyy-MM-dd", "MMM dd, yyyy hh:mm:ss Z"}; 
    for (String dateFormat : dateFormats) {
        try {
            return out.format(new SimpleDateFormat(dateFormat).parse(dateStr));
        } catch (ParseException ignore) { }
    }
    throw new IllegalArgumentException("Invalid date: " + dateStr);
}

我不知道有这样做的图书馆。

于 2012-05-25T23:45:56.807 回答
0

答案是: Converting ISO 8601-compliant String to java.util.Date

一旦你有了你的日期,你就知道如何获得你的 UTC 时间。


编辑:接受的答案不使用joda time,而是使用jaxb。

顺便问一下,这些格式从何而来?

String dateStr = "2012-05-23T00:00:00-0400";
String dateStr1 = "May 24, 2012 04:57:40 GMT";
String dateStr2 = "2011-06-21";

如果它们与另一个语言环境不同,则它们可能是由 DateFormat.getDateTimeInstance(...,...) 生成的,因此也许尝试找出已使用的。

于 2012-05-26T00:10:48.383 回答