首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的RFC822时区解析

Java中的RFC822时区解析
EN

Stack Overflow用户
提问于 2010-05-13 07:15:58
回答 7查看 13.8K关注 0票数 8

我有一个被Dojo转换成RFC822格式的JS日期。函数调用- dojo.date.toRfc3339(jsDate)生成以下日期- 2007-02-26T20:15:00+02:00。

我有一个应用程序,它使用Java date SimpleDateFormat来解析上面生成的日期。由于时区的原因,我在解析此日期格式时遇到问题。我已经尝试使用

yyyy-mm-DD‘ssZ:mm:ssZ

这会失败,因为表示时区的“Z”不需要“:”字符。有人知道我将如何指定一个模式来处理带有':‘的RFC822日期吗?

修订:

感谢您正确地解释了我正在尝试做的事情:)我的意思是说日期是在RFC3339中生成的,我需要RFC822。看起来我将不得不覆盖JavaScript。我希望我不必这样做,并且可以指定日期格式模式,而不必修改任何Java代码,因为日期格式只是简单地注入到应用程序的Spring bean中。

为了完整起见,有没有一种方法可以在日期格式表达式中指定忽略序列中的字符(而不进行字符串操作/替换)?在这种情况下,我会说忽略任何':‘,或者干脆一起忽略时区?

EN

回答 7

Stack Overflow用户

发布于 2012-01-23 21:53:46

代码语言:javascript
复制
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateUtil {

    public static Date ParseRFC3339DateFormat(String p_date)
    {
        try{
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
            String dts = p_date.replaceAll("([\\+\\-]\\d\\d):(\\d\\d)","$1$2");
            return formatter.parse(dts);
        }catch (Exception e) {
                return null;
        }
    }
}
票数 4
EN

Stack Overflow用户

发布于 2010-05-13 07:38:15

这是可行的

代码语言:javascript
复制
SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-DD'T'hh:mm:ssZ");
format.parse("2007-02-26T20:15:00+02:00".replaceAll("([\\+\\-]\\d\\d):(\\d\\d)","$1$2"));

(注意,我从格式中去掉了'Z‘格式说明符后面的最后一个冒号。)

票数 3
EN

Stack Overflow用户

发布于 2010-05-13 07:43:44

RFC822不允许冒号出现在日期的时区部分。它只需要4位数。该Dojo方法的名称表明它正在使用RFC3339。看起来它实际上和ISO8601的格式是一样的。如果您能够使用该库,那么Joda Time恰好具有与ISO8601兼容的ISODateTimeFormat。方法dateTimeNoMillis()看起来与Dojo格式匹配。它确实比标准的Java日期和时间API更好。否则,高咖啡因的建议将是可行的。

针对Jamen的更新,更新了

有没有办法让Dojo使用不包含时区的格式?然后,您可以在Java端调整格式以匹配。我对Dojo了解不多,也找不到任何关于它提供的toRfc3339函数的文档。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2823442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档