【问题标题】:How to force Joda-Time to parse only part of String?如何强制 Joda-Time 只解析字符串的一部分?
【发布时间】:2010-11-11 10:49:08
【问题描述】:

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

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

【问题讨论】:

    标签: java jodatime


    【解决方案1】:

    只需使用相关的子字符串即可; 2009-05-15 并使用模式 yyyy-MM-dd 解析它。

    【讨论】:

    • 谢谢 - 重点是,我有很多格式在最后一部分可能会有所不同...
    • @krtek:好吧,在你提到的所有情况下,substring(0, 10) 都会匹配 2009-05-15 ;-)
    【解决方案2】:

    我遇到了同样的问题,有多种日期格式,我只想在某个时间点之后忽略所有内容。我所做的是创建一个消耗所有 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】:

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

      【讨论】:

        【解决方案4】:

        成功解析日期后,您始终可以忽略时区。

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

        yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
        

        整个应用程序中的日期格式是相同的还是不同的?


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

        【讨论】:

        • 日期格式可能非常不同,因为它们来自不同的来源 - 请参阅重新格式化的问题。
        猜你喜欢
        • 2014-08-18
        • 2013-10-07
        • 1970-01-01
        • 1970-01-01
        • 2013-08-31
        • 1970-01-01
        • 2011-02-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多