我正在使用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。
慕神8447489
TA贡献1780条经验 获得超1个赞
不幸的是,我不相信Joda Time具有任何这样的功能。拥有“ tryParseDateTime”方法会很好,但是它不存在。
我建议您将此行为隔离到自己的类中(一个接受一系列模式并依次尝试的模式),以便仅将丑陋之处放在一个地方。如果这导致性能问题,您可能想要尝试使用一些启发式方法来猜测首先尝试哪种格式。例如,如果您的字符串以数字开头,则可能是第一个模式。
请注意,DateTimeFormatter
Joda Time中的s通常是不可变的-每次要解析一行时都不应创建一个新值。一次创建它们并重复使用它们。
添加回答
举报
0/150
提交
取消