我们假设我有以下日期(在字符串中):
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();
我得到以下例外:
java.lang.IllegalArgumentException: Invalid format: "2009-05-15T23:00:00.000Z" is malformed at "T23:00:00.000Z"
有没有办法强制Joda-Time忽略其余字符串?
答案 0 :(得分:3)
只需使用相关的子字符串; 2009-05-15
并使用模式yyyy-MM-dd
解析该内容。
答案 1 :(得分:1)
我认为你首先需要匹配字符串模式,然后将匹配的子字符串传递给jodatime。
答案 2 :(得分:1)
我遇到了同样的问题,多个日期格式,我只是想在某一点之后忽略所有内容。我所做的是创建一个消耗所有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();
我希望有所帮助。
答案 3 :(得分:0)
成功解析日期后,您始终可以忽略时区。
现在使用模式(对于您的日期字符串格式2009-05-15T23:00:00.000Z
)
yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
您的日期格式在整个应用程序中是相同的还是不同?
根据您编辑的帖子,您似乎并不真正需要时间部分,因此只需获取日期字符串的相关前10个字符并使用yyyy-MM-dd
格式进行解析。