2012-03-14 122 views
6

我想为Java SimpleDaterFormat定义一个模式来解析现有的字符串。用SimpleDateFormat解析时区格式的正确模式

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

我尝试过不同的模式,但我得到了ParseExceptions。问题似乎是时区格式。

打印模式在Java中:

  • yyyy-MM-dd'T'HH:mm:ssZ
    • 2012-03-14T15:40:44+0100
  • yyyy-MM-dd'T'HH:mm:ssz
    • 2012-03-14T15:41:58MEZ

但我怎么能得到

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

我使用Java 6中,而不是Java 7

回答

5

如果你可以使用Java 7或更高版本,可以使用XXX模式来获得时区看例如+02:00:

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

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

+0

THX。支持ISO 8601时区是用Java 7实现的,但是我的应用程序在Java 1.6下运行。 – cuh 2012-03-14 14:59:21

+1

也许你可以在将它传递给格式化程序之前删除冒号然后呢?我认为这个正则表达式应该只对冒号有效:dateString.replaceFirst(“(\\ d \\ d):(\\ d \\ d)$”,“$ 1 $ 2”) – matts 2012-03-14 15:08:39

+0

我无法修改字符串第一。我使用一个工具来导入一组数据,并且只能定义一个模式。 – cuh 2012-03-14 15:15:24

0

我知道这是一个古老的问题,但其他人可能会从我的提示中受益。 您可以使用JodaTime。作为库documentation手段:

区域:“Z”的输出偏移没有结肠,“ZZ”输出具有 偏移冒号,“ZZZ”或多个输出区域ID。

您可以用java 6.使用它,以及你有更多的例子在this question