如何强制Joda-Time只解析String的一部分?

我假设我有以下日期(在String中):

2009-05-15T23:00:00 2009-05-15T23:00:00.000Z 2009-05-15 

我不关心时间和区域,只有日期与我相关。 所以我想尝试用以下模式解析它:

YYYY-MM-DD

我尝试使用Joda-Time解析它:

 DateTimeFormat = DateTimeFormat.forPattern("yyyy-MM-dd"); format.withZone(zone).parseDateTime(string).toLocalDate(); 

我得到以下exception:

 java.lang.IllegalArgumentException: Invalid format: "2009-05-15T23:00:00.000Z" is malformed at "T23:00:00.000Z" 

有没有办法如何强制Joda-Time忽略其余的字符串?

我有同样的问题,多个日期格式,我只是想在某一点之后忽略所有内容。 我所做的是创建一个消耗所有DateTimeParser,然后使用DateTimeFormatterBuilder添加它。

我相信这会满足你的需求:

JodaDateTimeConsumeAll.java:

 public class JodaDateTimeConsumeAll implements DateTimeParser{ @Override public int estimateParsedLength() { return 100; } @Override public int parseInto(DateTimeParserBucket bucket, String text, int position) { return text.length(); //consume the whole thing } } 

FormatterBuilder:

 DateTimeParser dtp = new DateTimeFormatterBuilder() .appendYear(4,4) .appendLiteral("-") .appendDayOfMonth(2) .appendLiteral("-") .appendMonthOfYear(2) .append(new JodaDateTimeConsumeAll()) .toFormatter() .getParser(); 

我希望有所帮助。

只需使用相关的子串; 2009-05-15并用模式yyyy-MM-dd解析。

我想你首先需要匹配字符串模式,然后将匹配的子字符串传递给jodatime。

在成功解析日期后,您始终可以忽略时区。

现在使用模式(对于您的日期字符串格式2009-05-15T23:00:00.000Z

 yyyy-MM-dd'T'HH:mm:ss.SSS'Z' 

您的日期格式在整个应用程序中是相同的还是不同?


根据您编辑的post,您似乎并不真正需要时间部分,因此只需获取日期字符串的相关前10个字符并使用yyyy-MM-dd格式进行解析。