我们有一些像这样的现有代码:
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以使空格更加轻松?
答案 0 :(得分:7)
我认为在解析
之前处理输入字符串要容易得多str = str.replaceAll(" +", " ");
答案 1 :(得分:3)
我认为对其他人来说很有用,因为自Java 8以来,我们可以通过重写模式来解决上述问题:
String pattern = "EEE,[ ][ ]d MMM yyyy HH:mm:ss Z"
此代码在逗号后匹配1或2个空格。