如何强制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
格式进行解析。