我正在将一些旧代码从SimpleDateFormat迁移到DateTimeFormatter。(Apache MIME4J库,这将释放显着的性能提高!)
在电子邮件领域工作,我需要遵守RFC-5322,并提出了以下格式化程序:
public static final DateTimeFormatter RFC_5322 = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.parseLenient()
.optionalStart()
.appendText(DAY_OF_WEEK, dayOfWeek())
.appendLiteral(", ")
.optionalEnd()
.appendValue(DAY_OF_MONTH, 1, 2, SignStyle.NOT_NEGATIVE)
.appendLiteral(' ')
.appendText(MONTH_OF_YEAR, monthOfYear())
.appendLiteral(' ')
.appendValueReduced(YEAR, 2, 4, INITIAL_YEAR)
.appendLiteral(' ')
.appendValue(HOUR_OF_DAY, 2)
.appendLiteral(':')
.appendValue(MINUTE_OF_HOUR, 2)
.optionalStart()
.appendLiteral(':')
.appendValue(SECOND_OF_MINUTE, 2)
.optionalEnd()
.optionalStart()
.appendLiteral('.')
.appendValue(MILLI_OF_SECOND, 3)
.optionalEnd()
.optionalStart()
.appendLiteral(' ')
.appendOffset("+HHMM", "GMT")
.optionalEnd()
.optionalStart()
.appendLiteral(' ')
.appendOffsetId()
.optionalEnd()
.optionalStart()
.appendLiteral(' ')
.appendPattern("0000")
.optionalEnd()
.optionalStart()
.appendLiteral(' ')
.appendPattern("(zzz)")
.optionalEnd()
.toFormatter()
.withZone(ZoneId.of("GMT"));它可以很好地处理输入,比如Thu, 4 Oct 2001 20:12:26 -0700 (PDT)。
然而,一些边缘电子邮件在“Date: Thu, 4 Oct 2001 20:12:26 -0700 (PDT),Thu, 4 Oct 2001 20:12:26 -0700”之后添加了额外的字符,使解析失败.
我想用通配符说“现在你可以忽略额外的输入了”.
以前基于SimpleDateFormat的版本处理得很好.
下面是拉请求的链接:https://github.com/apache/james-mime4j/pull/44
提前感谢您的帮助!
发布于 2021-06-17 09:26:13
RFC_5322.parse(body,new ParsePosition(0))解决了这个问题.
https://stackoverflow.com/questions/68016367
复制相似问题