当前位置: 首页 > 面试题库 >

将日期字符串解析为某些Java对象

赵立果
2023-03-14
问题内容

我正在一个读取文件并处理数据的项目中工作。例如,我在那里处理日期:

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

我找到了Joda包,有点有趣,但是不知道它是否最简单。

我能够将第一个示例解析为DateTime对象(Joda)reg-ex和String操作。(例如:用’-‘代替空格,并将其传递给构造函数。

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.timeJoda-Time即可。它包含了乔达(Joda)几乎所有的好东西。对于那些已经熟悉Joda API的人,Stephen
Colebourne的Joda-Time到java.time迁移指南非常有用。

这是上述示例的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一样)。



 类似资料:
  • 我试图用GMT解析一个表示日期的字符串,但它在我的PC(太平洋)上的时区中打印出来。当我运行下面的时,我得到下面的输出。关于如何让解析器解析并返回GMT日期有什么想法吗?如果您看下面,我正在使用format.settimezone(timezone.gettimezone(“GMT”))设置时区;但它并没有产生预期的结果。 以下代码的输出: 10月29日星期一05:57:00 PDT 2012

  • 问题内容: 如何将下面的日期字符串解析为一个Date对象? 引发异常… 问题答案: 模式是错误的。您有3个字母的天的缩写,因此必须为。您有3个字母的月份缩写,因此必须为。由于这些日和月的缩写对语言环境敏感,因此您也希望将语言环境明确指定为英语,否则它将使用平台默认语言环境,而语言环境本身可能不是英语。 这在这里打印 根据我的时区是正确的。 如果您不想使用代替,我也会重新考虑。阅读javadoc以获

  • 问题内容: 我的日期格式为“ yyyy-MM-dd’T’HH:mm:ss.sssZ”。例如,日期为“ 2018-07-17T09:59:51.312Z”。我正在使用下面的代码来解析Java中的String。 这给了我“无法解析的日期:”例外。谁能告诉我该怎么做? 问题答案: 您忘了在 那会做的工作

  • 这就是问题所在: 我有一些带有旅行信息的. csv文件,日期显示为字符串(每一行代表一次旅行): “1-5月和10-12月的所有星期一。6-9月的所有日子” 我必须将字符串解析为日期,并为每次旅行将其保存到一个数组中。 问题是我不知道怎么做。甚至我的大学老师也告诉我,他们不知道如何做到这一点:S。我无法使用http://docs.oracle.com/javase/6/docs/api/java/

  • 问题内容: 我想将日期字符串解析为日期。我在寻找其他问题,但没有找到答案。 错误消息是java.text.ParseException:而且我不知道怎么了。 你能帮我吗。提前致谢。 编辑:好的。我将其翻译成英文,但是我仍然遇到同样的问题。我不想更改输入,因为它来自邮件数据库。还有其他想法吗? 我发现了问题。我是瞎子 来自数据库的St是,不是 谢谢。 问题答案: 在德语中,“欧洲中部时间”是“Mit

  • 问题内容: 我从声称的API获取下一个字符串 所有日期格式均为ISO8601。 我正在尝试下一个代码: 不幸的是,结果 updatedAt 为nil 问题答案: 您的日期格式不正确,您需要考虑毫秒。 需要澄清的是,在日期格式中添加可以解决此问题。