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

我正在使用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。


您能提出一种不会滥用异常的更好的方法吗?


桃花长相依
浏览 531回答 3
3回答

呼唤远方

Joda-Time通过允许指定多个解析器来支持此功能-DateTimeFormatterBuilder#append只需使用构建器创建两个格式化程序,然后分别调用toParser()它们。然后使用构建器将它们结合使用append。

慕神8447489

不幸的是,我不相信Joda Time具有任何这样的功能。拥有“ tryParseDateTime”方法会很好,但是它不存在。我建议您将此行为隔离到自己的类中(一个接受一系列模式并依次尝试的模式),以便仅将丑陋之处放在一个地方。如果这导致性能问题,您可能想要尝试使用一些启发式方法来猜测首先尝试哪种格式。例如,如果您的字符串以数字开头,则可能是第一个模式。请注意,DateTimeFormatterJoda Time中的s通常是不可变的-每次要解析一行时都不应创建一个新值。一次创建它们并重复使用它们。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java