Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何强制Joda只解析字符串的一部分?_Java_Jodatime - Fatal编程技术网

Java 如何强制Joda只解析字符串的一部分?

Java 如何强制Joda只解析字符串的一部分?,java,jodatime,Java,Jodatime,假设我有以下日期(字符串): 我不在乎时间和地域,只在乎日期。所以我想尝试用以下模式解析它: 年月日 我尝试使用以下方法对其进行分析: 我得到了以下例外: java.lang.IllegalArgumentException: Invalid format: "2009-05-15T23:00:00.000Z" is malformed at "T23:00:00.000Z" 有没有办法强迫Joda Time忽略字符串的其余部分?只需使用相关的子字符串2009-05-15并使用模式解析日期,在

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

我不在乎时间和地域,只在乎日期。所以我想尝试用以下模式解析它:

年月日

我尝试使用以下方法对其进行分析:

我得到了以下例外:

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

有没有办法强迫Joda Time忽略字符串的其余部分?

只需使用相关的子字符串
2009-05-15
并使用模式解析日期,在成功解析日期后,始终可以忽略时区

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

在整个申请过程中,您的日期格式是相同的还是不同的



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

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

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

我相信这将满足您的需求:

jodateTimeConsumeAll.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
    }

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

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
    }

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

我希望这能有所帮助。

谢谢-重点是,我有很多格式,在最后一部分可能会有所不同…@krtek:嗯,在你提到的所有情况下,子字符串(0,10)都会匹配2009-05-15;-)日期格式可能非常不同,因为它们来自不同的来源-请参阅重新格式化的问题。
DateTimeParser dtp = new DateTimeFormatterBuilder()
    .appendYear(4,4)
    .appendLiteral("-")
    .appendDayOfMonth(2)
    .appendLiteral("-")
    .appendMonthOfYear(2)
    .append(new JodaDateTimeConsumeAll())
    .toFormatter()
    .getParser();