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

时间:2010-11-11 10:49:09

标签: java jodatime

我们假设我有以下日期(在字符串中):

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忽略其余字符串?

4 个答案:

答案 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格式进行解析。