Joda-Time 使用 Pattern 从 String 创建 LocalDate

Joda-Time create LocalDate from String with Pattern

我正在尝试使用 JodaTime 库从输入字符串创建 LocalDate 对象。该字符串来自我无法控制的数据库。输入的出生日期完全如下所示:

1963-07-19T00:00:00.000+0000

我只想要 1963-07-19 部分,我不需要时间部分。所以我尝试像这样实现格式化程序:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd");

然后像这样创建 LocalDate 对象:

LocalDate dob = formatter.parseLocalDate(dateOfBirth);

但是我得到错误:

Invalid format: "1963-07-19T00:00:00.000+0000" is malformed at "T00:00:00.000+0000"

我也试过像这样的格式化程序:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'hh:mm:ss.SSSZ");

但是我得到了错误:

Cannot parse "1963-07-19T00:00:00.000+0000": Value 0 for clockhourOfHalfday must be in the range [1,12]

以及如何实现我想要的想法?

您的第一个示例将不起作用,因为 parseLocalDate 必须将整个输入字符串与您的模式相匹配。

对于你的第二个例子,根据 javadoc of DateTimeFormat,模式字母 h 定义

h       clockhour of halfday (1~12)  number        12

看起来你想要

H       hour of day (0~23)           number        0

您显示的日期采用标准格式 - ISO8601 标准。

Joda-Time 有一个特殊的 class 用于为这个特定标准创建 DateTimeFormatter 对象 - ISODateTimeFormat class.

所以你可以这样做:

DateTimeFormatter formatter = ISODateTimeFormat.dateTime();
LocalDate dob = formatter.parseLocalDate(theDate);

有关处理 ISO-8601 日期格式的不同变体的其他方法,请参阅 documentation。对于您显示的特定字符串,dateTime() 方法应该有效。