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();