用Java解析带有奇怪时区的日期

用Java解析带有奇怪时区的日期,java,date-format,Java,Date Format,我将以以下格式向我的申请发送日期: yyyy-MM-dd'T'HH:mm:ss.SSS-04:00 问题是时区,它不遵循Z格式(-0400),也不遵循Z格式(GMT-04:00) 我是否还缺少另一种格式选项,或者可以输入解析这些时区的方法?考虑切换到-它比java原生日期库提供了更多的灵活性和可读性,包括处理时区样式(这是我切换的关键原因之一).考虑切换到-它比java原生日期库提供了更多的灵活性和可读性,包括处理时区样式(这是我切换的关键原因之一)。这种简单的方法开发速度快且简单 class

我将以以下格式向我的申请发送日期:

yyyy-MM-dd'T'HH:mm:ss.SSS-04:00
问题是时区,它不遵循Z格式(-0400),也不遵循Z格式(GMT-04:00)


我是否还缺少另一种格式选项,或者可以输入解析这些时区的方法?

考虑切换到-它比java原生日期库提供了更多的灵活性和可读性,包括处理时区样式(这是我切换的关键原因之一).

考虑切换到-它比java原生日期库提供了更多的灵活性和可读性,包括处理时区样式(这是我切换的关键原因之一)。

这种简单的方法开发速度快且简单

class TimeTest {
    public static void main(String[] args) {
        String s = "yyyy-MM-dd'T'HH:mm:ss.SSS-04:00";
        String t = "yyyy-MM-dd'T'HH:mm:ss.SSS-0400";
        System.out.println(s + " --> " + fix(s));
        System.out.println(t + " --> " + fix(t));
    }

    static String fix(String s) {
        int last = s.lastIndexOf(":");
        if(last == s.length() - 3) {
            s = s.substring(0,last) + s.substring(last+1);
        }
        return s;
    }
}

这种天真的方法发展迅速,而且简单

class TimeTest {
    public static void main(String[] args) {
        String s = "yyyy-MM-dd'T'HH:mm:ss.SSS-04:00";
        String t = "yyyy-MM-dd'T'HH:mm:ss.SSS-0400";
        System.out.println(s + " --> " + fix(s));
        System.out.println(t + " --> " + fix(t));
    }

    static String fix(String s) {
        int last = s.lastIndexOf(":");
        if(last == s.length() - 3) {
            s = s.substring(0,last) + s.substring(last+1);
        }
        return s;
    }
}

您似乎正在获取XSD日期时间格式。如果您想坚持使用纯开箱即用的Java,请查看javax.xml.datatype.XMLGregorianCalendar,它是为处理这类事情而构建的


然而,正如另一张海报所说,使用第三方库(如Joda time)可能会更容易。Java日历对象的使用总是有点麻烦。

您似乎得到了XSD日期时间格式。如果您想坚持使用纯开箱即用的Java,请查看javax.xml.datatype.XMLGregorianCalendar,它是为处理这类事情而构建的


然而,正如另一张海报所说,使用第三方库(如Joda time)可能会更容易。Java日历对象的使用总是有点麻烦。

这是一致的行为吗?如果是这样,您可以使用正则表达式来重新格式化字符串。这是一致的行为吗?如果是这样,您可以使用正则表达式来重新格式化字符串。+ 1,OPS日期格式看起来是标准的XSD数据格式,它在时区中间添加了麻烦的冒号。+ 1,OPS日期格式看起来是标准的XSD数据格式,它在时区中间添加了麻烦的冒号。