java - 使用 SimpleDateFormat 解析 svn log -xml 日期输出

标签 java xml svn simpledateformat java.util.date

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/

相关文章:

xml - 在 D 中解析 XML

sql - 使用 SQL Server 上另一个 XML 的节点更新 XML 列

visual-studio - 如何将 AnkhSVN 中的解决方案更新到最新版本?

svn - 如何获取评论中不包含 Jira bug key 的所有 SVN 提交?

svn - 如何使用 master.cfg 文件获取 Buildbot 中已完成构建的最新 SVN 修订号?

java - bintray api如何授权

Java 条件语句未按预期工作

java - Jboss 6.4服务器可以工作,7.1服务器不能工作

java - 未找到 Android 源?

php - 使用 php 使用 getElementsByTagName 检索 rss 图像