[英]Joda time - Parsing when the format varies
我从一个网站接收日期/时间字符串,该网站似乎具有毫秒值的可变位数。
样品:
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();
}
有一个更整洁的方式吗?
我找到了一个解决我的ms字段中可变位数的具体问题的解决方案。
static final DateTimeFormatter isoParser = ISODateTimeFormat.dateTimeParser();
public static Date parseDate(String date) {
return isoParser.parseDateTime(date).toDate();
}
但是 - 我会对一种更通用的解决方案感兴趣,该解决方案可以处理几种可能但可区分的格式中的任何一种。
为什么不拆分+
符号,并附加所需的剩余小数位? 例如。 更改
2013-08-15T06:21:49.35054
至
2013-08-15T06:21:49.350540
然后只使用一个 DateTimeFormat
我更喜欢使用这种方式,因为你正在处理ISO-8601
public static Date getDateFromIsoISO8601(String str) {
try {
return ISO8601Utils.parse(str, new ParsePosition(0));
} catch (Exception e) {
Log.e("Parsing","error:getDateFromIsoISO8601: " + e.getMessage());
return null;
}
}
使用Joda-time
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.