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()
方法应该有效。
我正在尝试使用 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()
方法应该有效。