2012-03-14 126 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