0

对于我目前正在进行的项目,我需要将String转换为Date。不幸的是,在所有需要转换的字符串中,日期和时间的格式不同。在当前值中,我们经常看到类似2011-06-25T22:44:122011-06-25 22:49:01的内容(注意 T?)。

我知道如何使用SimpleDateFormat将String转换为Date,但由于我不知道输入将采用什么格式,这似乎不是正确的方法。我想知道是否有办法向DateFormat对象添加几种“格式”,或者是否有一个可以自动检测格式的DateFormat类?

我正在考虑的另一种方法是在字符串上使用一些 if/else 语句和正则表达式来确定正在使用什么格式并使用与之匹配的SimpleDateFormat类,但我很确定应该有一个更简单的方法. 有什么建议么?

4

3 回答 3

1

里面的 T 是因为它是日期http://en.wikipedia.org/wiki/ISO_8601的标准 ISO 格式。但是请注意,这种带有“T”的格式只是您在日期为 ISO 8601 时可能会看到的几种变体之一(其中一种变体是去掉时间,另一种是遵循时区规范)。

如果您知道您的日期将符合 ISO 8601 标准(这通常适用于明确指定的 XML - 当您使用符合 ISO 8601 的 XSD 日期字段时)那么 Java 的 SimpleDateFormat 是不够的 - 它太简单了......您可以改用 JodaTime 库 - Joda Time 已经准备好 ISO 8601 格式化程序供您使用:http: //joda-time.sourceforge.net/api-release/org/joda/time/format/ISODateTimeFormat.html

编辑:我不会实现任何复杂的正则表达式匹配 - 从长远来看,它使代码难以维护和理解(特别是如果你可以拥有多种格式的许多来源)

建议是 - 找出哪个提供商使用哪种格式并采用策略模式:formatter = DateFormatterStrategyChooser.getFormatter(String source)。分而治之。

如果您不能 100% 确定哪个来源会带来什么样的日期 - 您仍然可以使用 UmbrellaFormatter(Collection) 并依次遍历每个格式化程序,直到一个成功。这对于可维护性是最好的,而不是依赖于晦涩和复杂的规则.

于 2011-06-25T21:35:59.353 回答
0

测试是否存在“T”,如果存在,则解析字符串并用空格替换。现在您可以使用 Date Formatter 创建 Date 对象。

于 2011-06-25T21:24:22.873 回答
0

如果您有多种变体,而不仅仅是一个带有“T”而另一个带有空格,我相信带有几个正则表达式和匹配 SimpleDateFormats 的 if/then/else 是要走的路。

于 2011-06-25T21:25:43.177 回答