Java 使用SimpleDataFormat解析svn日志-xml日期输出
svnlog命令的xml输出的日期格式如下所示Java 使用SimpleDataFormat解析svn日志-xml日期输出,java,xml,svn,simpledateformat,java.util.date,Java,Xml,Svn,Simpledateformat,Java.util.date,svnlog命令的xml输出的日期格式如下所示 2014-04-24T08:51:58.213757Z 我尝试使用SimpleDataFormat和以下字符串将其解析为util.Date对象 yyyy-MM-ddTHH:mm:ss.SSSSSSZ 完全法 protected Date formatDate(String dateString) { //2014-04-24T08:51:58.213757Z DateFormat format = new Si
2014-04-24T08:51:58.213757Z
我尝试使用SimpleDataFormat和以下字符串将其解析为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解释为毫秒数,而不是微秒数
我不确定是否有一种干净的方法可以用SimpleDataFormat
解析微秒-您最好只解析一个子字符串:
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”的意思。谢谢!我在理解字符串的解析方面有点困难。使用上述格式字符串解析“2014-04-24T08:51:58.213”将生成一个值为“Thu Apr 24 08:52:19 IST 2014”的数据对象。我正在将时区设置为本地时区,保存此值(svn服务器位于同一时区)。我不知道为什么会出现这种差异。@Chamila:Ajava.util.Date
没有时区。。。但是调用toString()
总是在系统本地时区对其进行格式化。但我很怀疑像那样改变秒数的价值。。。不过,我刚刚注意到我的代码中有一个缺陷,这可能就是问题所在——请稍后检查。(我只是更改了子字符串调用。)我检查了我的代码,实际上包含了开始索引:)。我也对toString()进行了评估,但在几秒钟内产生了相同的差异。我计划使用Joda时间库来实现日期时间。它可以将ISO-8601格式的字符串作为输入,并且似乎没有异常行为。谢谢你的回复@查米拉:请用一个简短但完整的程序来更新你的问题。它真的应该是好的。当它将UTC转换为您的本地时区时,我希望看到小时和分钟的差异,但不是秒的差异…@Chamila:Righto,这是有道理的。它在所有方面都是一个更好的API:)