java - 将日期字符串解析为某个 Java 对象

标签 java datetime jodatime date-parsing

我在一个读取文件和处理数据的项目中工作。例如,我需要处理日期:

  1. 2012-01-10 23:13:26
  2. 2012 年 1 月 13 日

我找到了 Joda 包,有点意思,但不知道是不是最简单的。

我能够将第一个示例解析为 DateTime 对象 (Joda) 正则表达式和字符串操作。 (例如:将空格替换为 '-' 并将其传递给构造函数。

new DateTime("2012-01-10 23:13:26".replace(' ', '-'))

我猜它有效,但问题在于第二种格式。我如何使用这样的输入来提取对象,最好是 Joda 对象。我当然可以编写一个函数来将格式更改为 Joda 支持的格式,但想知道是否还有其他方法(甚至是一些本地 Java 库)来做到这一点。

如果有什么比 Joda 更好的东西,也请告诉我。

谢谢。

最佳答案

使用 Joda-Time,查看 DateTimeFormat ;它允许解析您提到的两种日期字符串(以及几乎任何其他任意格式)。如果您的需求更加复杂,请尝试 DateTimeFormatterBuilder .

解析#1:

DateTimeFormatter f = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime dateTime = f.parseDateTime("2012-01-10 23:13:26");

编辑:实际上是 LocalDateTime对于没有时区的日期时间来说是更合适的类型:

LocalDateTime dateTime = f.parseLocalDateTime("2012-01-10 23:13:26");

对于#2:

DateTimeFormatter f = DateTimeFormat.forPattern("MMMM dd, yyyy");
LocalDate localDate = f.parseLocalDate("January 13, 2012");

是的,就 Java 日期和时间处理而言,Joda-Time 绝对是最佳选择。 :)

大多数人都会同意,Joda 是一个非常用户友好的库。例如,我以前从未使用 Joda 进行过这种解析,但我只花了几分钟就从 API 中弄清楚并编写了它。

更新(2015 年)

如果您使用的是 Java 8,在大多数情况下,您应该简单地使用 java.time而不是 Joda Time 。它包含了几乎所有来自 Joda 的好东西——或它们的等价物。对于那些已经熟悉 Joda API 的人,Stephen Colebourne 的 Joda-Time to java.time migration guide派上用场。

这里是上述示例的 java.time 版本。

解析#1:

DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime dateTime = LocalDateTime.from(f.parse("2012-01-10 23:13:26"));

您无法将其解析为 ZonedDateTime 或 OffsetDateTime(它们是 Joda 的 DateTime 的对应物,在我的原始答案中使用),但这有点道理,因为解析的字符串中没有时区信息。

解析#2:

DateTimeFormatter f = DateTimeFormatter.ofPattern("MMMM dd, yyyy");
LocalDate localDate = LocalDate.from(f.parse("January 13, 2012"));

这里 LocalDate 是最适合解析的类型(就像 Joda-Time 一样)。

关于java - 将日期字符串解析为某个 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8854780/

相关文章:

java - 在Java中,如何将自纪元以来的秒数转换为自1970年1月1日以来的毫秒数,00 :00:00 GMT

java - 将普通语言持续时间转换为 Joda 周期或 ISO 8601

android - JodaTime 无法识别某些 Android 时区

java - 获取 Web 应用程序的 DBConnection 的正确方法

java - 所有 hibernate hbm.xml 文件的一个映射文件夹

MySQL 时区 Transaction_type_id

excel - 单元格显示日期但不显示时间

java - joda - 解析 RSS 项中 pubDate 的时区

java - Spring3/Hibernate3/TestNG : some tests give LazyInitializationException, 有些没有

java - 如何在java中将Blob转换为字符串和字符串转换为Blob