gpt4 book ai didi

java - joda - 解析 RSS 项中 pubDate 的时区

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:51:53 29 4
gpt4 key购买 nike

我正在使用 Joda 解析 RSS 项中的 pubDate。日期必须采用 RFC-822 格式: http://feed2.w3.org/docs/error/InvalidRFC2822Date.html

问题是当有这样一个日期时:2002 年 10 月 2 日星期三 13:00:00 GMT我必须使用模式:

DateTimeFormat.forPattern("EEE, dd MMM yyyy HH:mm:ss ZZZ").withLocale(Locale.ENGLISH).withOffsetParsed();

但它也可以是这样的日期:Wed, 02 Oct 2002 15:00:00 +0200。在这种情况下 ZZZ 不起作用,我必须使用一个 Z:

DateTimeFormat.forPattern("EEE, dd MMM yyyy HH:mm:ss Z").withLocale(Locale.ENGLISH).withOffsetParsed();

如何创建通用解决方案?

最佳答案

我用 JodaTime 2.7 进行了测试,发现了两种方法:

  1. 使用 DateTimeFormatterBuilder 的可选解析器:

    // create parser for "GMT"
    DateTimeParser gmtParser = DateTimeFormat.forPattern("ZZZ").getParser();

    // create parser for "+0200"
    DateTimeParser offsetParser = DateTimeFormat.forPattern("Z").getParser();

    DateTimeFormatter formatter = new DateTimeFormatterBuilder()
    .appendPattern("EEE, dd MMM yyyy HH:mm:ss ") // common pattern
    .appendOptional(gmtParser) // optional parser for GMT
    .appendOptional(offsetParser) // optional parser for +0200
    .toFormatter().withLocale(Locale.ENGLISH).withOffsetParsed();
  2. DateTimeFormatterBuilder 可以接收可用于解析不同输入的解析器数组:

    // create array with all possible patterns
    DateTimeParser[] parsers = {
    DateTimeFormat.forPattern("EEE, dd MMM yyyy HH:mm:ss Z").getParser(),
    DateTimeFormat.forPattern("EEE, dd MMM yyyy HH:mm:ss ZZZ").getParser()
    };

    // create a formatter using the parsers array
    DateTimeFormatter formatter = new DateTimeFormatterBuilder()
    .append(null, parsers) // use parsers array
    .toFormatter().withLocale(Locale.ENGLISH).withOffsetParsed();

使用上述任何一种解决方案,formatter 都将适用于两种输入:

System.out.println(formatter.parseDateTime("Wed, 02 Oct 2002 13:00:00 GMT"));
System.out.println(formatter.parseDateTime("Wed, 02 Oct 2002 15:00:00 +0200"));

输出将是:

2002-10-02T13:00:00.000Z
2002-10-02T15:00:00.000+02:00

注意:如果您在所有模式中有一个共同部分并且它们之间的差异很小,我相信第一个解决方案更好。如果模式彼此非常不同,则第二种解决方案更好。但我也相信这是一个见仁见智的问题,由你来选择。

关于java - joda - 解析 RSS 项中 pubDate 的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17353789/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com