为了账号安全,请及时绑定邮箱和手机立即绑定

使用Joda日期和时间API解析多种格式

使用Joda日期和时间API解析多种格式

桃花长相依 2019-12-26 13:51:41
我正在使用Joda解析包含日期/时间的第三方日志文件。日期/时间采用两种不同格式之一,具体取决于我要分析的日志文件的使用期限。目前,我有这样的代码:try {    return DateTimeFormat.forPattern("yyyy/MM/dd HH:mm:ss").parseDateTime(datePart);} catch (IllegalArgumentException e) {    return DateTimeFormat.forPattern("E, MMM dd, yyyy HH:mm").parseDateTime(datePart);}此方法有效,但违反了有效Java 2nd Edition中Joshua Bloch的建议(条款57:仅在特殊情况下使用例外)。由于日志文件中错误的日期/时间,这也使得很难确定是否发生IllegalArgumentException。您能提出一种不会滥用异常的更好的方法吗?
查看完整描述

3 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

Joda-Time通过允许指定多个解析器来支持此功能-DateTimeFormatterBuilder#append


只需使用构建器创建两个格式化程序,然后分别调用toParser()它们。然后使用构建器将它们结合使用append。


查看完整回答
反对 回复 2019-12-26
?
慕神8447489

TA贡献1780条经验 获得超1个赞

不幸的是,我不相信Joda Time具有任何这样的功能。拥有“ tryParseDateTime”方法会很好,但是它不存在。

我建议您将此行为隔离到自己的类中(一个接受一系列模式并依次尝试的模式),以便仅将丑陋之处放在一个地方。如果这导致性能问题,您可能想要尝试使用一些启发式方法来猜测首先尝试哪种格式。例如,如果您的字符串以数字开头,则可能是第一个模式。

请注意,DateTimeFormatterJoda Time中的s通常是不可变的-每次要解析一行时都不应创建一个新值。一次创建它们并重复使用它们。


查看完整回答
反对 回复 2019-12-26
  • 3 回答
  • 0 关注
  • 530 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信