Java Joda Time使用模式从字符串创建LocalDate

Java Joda Time使用模式从字符串创建LocalDate,java,parsing,jodatime,formatter,Java,Parsing,Jodatime,Formatter,我正在尝试使用JodaTime库从输入字符串创建LocalDate对象。字符串来自我无法控制的数据库。输入的出生日期看起来像这样: 1963-07-19T00:00:00.000+0000 我只想要1963-07-19部分,我不想要时间部分。所以我尝试实现一个格式化程序,如下所示: DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd"); DateTimeFormatter formatter = DateT

我正在尝试使用JodaTime库从输入字符串创建LocalDate对象。字符串来自我无法控制的数据库。输入的出生日期看起来像这样:

1963-07-19T00:00:00.000+0000
我只想要
1963-07-19
部分,我不想要时间部分。所以我尝试实现一个格式化程序,如下所示:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd");
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'hh:mm:ss.SSSZ");
然后创建LocalDate对象,如下所示:

LocalDate dob = formatter.parseLocalDate(dateOfBirth);
但我得到了一个错误:

Invalid format: "1963-07-19T00:00:00.000+0000" is malformed at "T00:00:00.000+0000"
Cannot parse "1963-07-19T00:00:00.000+0000": Value 0 for clockhourOfHalfday must be in the range [1,12]
我也尝试过这样的格式化程序:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd");
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'hh:mm:ss.SSSZ");
但是我得到了一个错误:

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

你知道如何实现我想要的吗?

你的第一个例子不起作用,因为必须根据你的模式匹配整个输入字符串

对于第二个示例,根据,模式字母
h
定义

看起来你想要的


您显示的日期是标准格式-ISO8601标准

Joda Time有一个特殊的类,用于为该特定标准创建
DateTimeFormatter
对象,即
ISODateTimeFormat

所以你可以这样做:

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

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

很好,它可以工作。我只是担心DB以后会吐出一些更奇怪的东西,使程序崩溃。祝你好运。@richard如果需要,jodatime允许你定义多个解析器。看见