Joda时间 - 格式变化时解析

时间:2013-08-15 09:38:37

标签: java parsing jodatime

我从网站收到的日期/时间字符串似乎有毫秒值的可变位数。

样品:

  

2013-08-15T06:21:49.35054 + 01:00

     

2013-08-15T06:21:49.350546 + 01:00

     

2013-08-15T06:21:49 + 01:00

目前我使用:

static final Map<Integer,DateTimeFormatter> parsers = new HashMap<Integer,DateTimeFormatter>();
static {
  parsers.put("2013-07-23T22:44:00+01:00".length(),
              DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ"));
  parsers.put("2013-07-27T18:00:59.9+01:00".length(),
              DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SZ"));
  parsers.put("2013-07-27T18:00:59.99+01:00".length(),
              DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSZ"));
  parsers.put("2013-07-27T18:00:59.999+01:00".length(),
              DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"));
  parsers.put("2013-07-27T18:00:59.9999+01:00".length(),
              DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSZ"));
  parsers.put("2013-07-27T18:00:59.99999+01:00".length(),
              DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSZ"));
  parsers.put("2013-07-27T18:00:59.999999+01:00".length(),
              DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ"));
  parsers.put("2013-07-27T18:00:59.9999999+01:00".length(),
              DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ"));
}

public static Date parseDate(String date) {
  return parsers.get(date.length()).parseDateTime(date).toDate();
}

这样做有更简洁的方法吗?

3 个答案:

答案 0 :(得分:1)

我找到了解决ms字段中可变位数的具体问题的解决方法。

static final DateTimeFormatter isoParser = ISODateTimeFormat.dateTimeParser();

public static Date parseDate(String date) {
  return isoParser.parseDateTime(date).toDate();
}

然而 - 我会对一个更通用的解决方案感兴趣,它可以处理几种可能但可区分的格式。

答案 1 :(得分:0)

为什么不拆分+符号,并附加所需的剩余小数位?例如。变化

2013-08-15T06:21:49.35054

2013-08-15T06:21:49.350540

然后只使用一个 DateTimeFormat

答案 2 :(得分:0)

我更喜欢这种方式,因为你正在处理ISO-8601

$('input[type="radio"]').on("change", setIframe);

var setIframe = function() {
  var url;
  //computation of url
  $('iframe').attr("src", url);
}

使用Joda-time