Java 使用SimpleDataFormat解析时区格式的正确模式是什么

Java 使用SimpleDataFormat解析时区格式的正确模式是什么,java,parsing,timezone,date-format,Java,Parsing,Timezone,Date Format,我想为Java定义一个模式来解析现有字符串 现有日期如下所示:2011-05-02T13:40:00+02:00 我尝试了不同的模式,但遇到了异常。问题似乎在于时区格式 用Java打印模式: yyyy-MM-dd'HH:MM:ssZ 2012-03-14T15:40:44+0100 yyyy-MM-dd'HH:MM:ssz 2012-03-14T15:41:58MEZ 但是我怎样才能得到它呢 ??? 2011-05-02T13:40:00+02:00 我使用的是Java 6,

我想为Java定义一个模式来解析现有字符串

现有日期如下所示:
2011-05-02T13:40:00+02:00

我尝试了不同的模式,但遇到了异常。问题似乎在于时区格式

用Java打印模式:

  • yyyy-MM-dd'HH:MM:ssZ
    • 2012-03-14T15:40:44+0100
  • yyyy-MM-dd'HH:MM:ssz
    • 2012-03-14T15:41:58MEZ
但是我怎样才能得到它呢

  • ???
    • 2011-05-02T13:40:00+02:00

我使用的是Java 6,而不是Java 7。

如果可以使用Java 7或更高版本,可以使用
XXX
模式将时区设置为+02:00:

yyyy-MM-dd'T'HH:mm:ssXXX

否则,在解析之前,您可能必须操作日期字符串以从时区中删除冒号。

我知道这是一个有点老的问题,但其他人可能会从我的提示中受益。 您可以使用
JodaTime
。如图书馆所示:

区域:“Z”输出不带冒号的偏移,“ZZ”输出带冒号的偏移 冒号“ZZZ”或更大的冒号输出区域id


您也可以在Java6中使用它。在Thx中有更多的例子。是的,对ISO 8601时区的支持是通过Java 7实现的,但是我的应用程序是在Java 1.6下运行的。也许您可以在将冒号传递给格式化程序之前删除冒号?我认为这个正则表达式只有在冒号存在时才有效:dateString.replaceFirst(“(\\d\\d):(\\d\\d)$”,“$1$2”)我不能先修改字符串。我使用一个工具导入一组数据,只能定义一个模式。上面@matts的评论对我有用,我在Android中解析了一个不支持Java 7的ISO8601日期模式值。简单明了的解决方案。