4

我们有一些像这样的现有代码:

DateFormat[] dateFormats = {
    new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH),
    new SimpleDateFormat("d MMM yyyy HH:mm:ss Z", Locale.ENGLISH)
};

出于线程安全的原因,我尝试将其转换为使用 Joda Time 的格式化程序,所以:

DateTimeFormatter[] dateFormats = {
    DateTimeFormat.forPattern("EEE, d MMM yyyy HH:mm:ss Z")
                  .withLocale(Locale.ENGLISH)
                  .withOffsetParsed(),
    DateTimeFormat.forPattern("d MMM yyyy HH:mm:ss Z")
                  .withLocale(Locale.ENGLISH)
                  .withOffsetParsed()
};

然而,令我惊讶的是,现有的测试用例坏了。特别是(至少是导致测试失败的第一行):

String dateString = "Wed,  1 Feb 2006 21:58:41 +0000";

DateFormat 愉快地匹配逗号后的两个或多个空格,但 DateTimeFormatter 只匹配单个空格。

我可能可以输入一种额外的格式来允许额外的空间,但是这样做有点糟糕,所以有没有办法自定义一个 DateTimeFormatter 来更轻松地处理空白?

4

2 回答 2

8

我认为在解析之前处理输入字符串要容易得多

str = str.replaceAll("  +", " ");
于 2013-10-18T01:38:38.953 回答
4

我认为对于其他人来说,从 Java 8 开始我们可以通过重写模式来解决上述问题,这将是有用的:

String pattern = "EEE,[  ][ ]d MMM yyyy HH:mm:ss Z"

此代码匹配逗号后的 1 或 2 个空格。

于 2018-11-10T14:28:57.227 回答