svn log命令的xml输出的日期格式如下。
2014-04-24T08:51:58.213757Z
我尝试使用 SimpleDateFormat 和以下字符串将其解析为 util.Date 对象。
yyyy-MM-ddTHH:mm:ss.SSSSSSZ
完整方法
protected Date formatDate(String dateString) {
//2014-04-24T08:51:58.213757Z
DateFormat format = new SimpleDateFormat("yyyy-MM-ddTHH:mm:ss.SSS");
format.setTimeZone(TimeZone.getTimeZone("Asia/Colombo"));
Date date = null;
int lengthToParse = "yyyy-MM-ddTHH:mm:ss.SSS".length();
try {
date = format.parse(dateString.substring(0, lengthToParse));
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
但是这会产生如下错误。
java.lang.IllegalArgumentException: Illegal pattern character 'T'
最佳答案
您需要引用 T
因为您希望它按字面匹配。您还希望使用 X
作为时区的格式说明符,而不是 Z
:
yyyy-MM-dd'T'HH:mm:ss.SSSSSSX
或者您可以将时区指定为 UTC,并同时引用 Z。
yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'
但是,您可能仍然遇到问题,因为这会将 213757 解释为毫秒数,而不是微秒数。
我不确定是否有一种使用 SimpleDateFormat
解析微秒的干净方法 - 您最好只解析子字符串:
String text = "2014-04-24T08:51:58.213567Z";
// You could just hard code the length, but this feels easier to read
String trimmed = text.substring(0, "yyyy-MM-ddTHH:mm:ss.SSS".length());
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
format.setTimeZone(TimeZone.getTimeZone("Etc/UTC");
Date date = format.parse(trimmed);
请注意,您肯定希望使用 Etc/UTC
作为时区,因为输入采用 UTC 格式...这就是结尾处的“Z”的含义字符串。
关于java - 使用 SimpleDateFormat 解析 svn log -xml 日期输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23579835/