2013-05-28 26 views
7

我知道這裏有幾個問題。但是我有一個特定日期模式的問題。這裏有一個例子:從字符串中提取時區

20130401100000[-03:EST] 

我有troble與-03因爲根據SimpleDateFormat文檔應該有4位數字。我得到的最接近的模式是這樣的:

yyyyMMddHHmmss'['Z':'z']' 

但是由於2位數字它不起作用。下面是我使用的測試代碼示例:

public static void main(String[] args) throws ParseException { 
    String input = "20130401100000[-03:EST]"; 

    DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss'['Z':'z']'"); 
    df.setTimeZone(TimeZone.getTimeZone("GMT"));  

    System.out.println(df.format(new Date())); 
    System.out.println(df.parse(input)); 
} 

當我打印new Date()我得到這個:

20130528155734[+0000:GMT] 

但是當我嘗試解析input我得到以下異常:

Exception in thread "main" java.text.ParseException: Unparseable date: "20130401100000[-03:EST]" 
at java.text.DateFormat.parse(DateFormat.java:337) 
at Teste.main(Teste.java:17) 

有誰知道我怎麼能解析inputDate與正確的TimeZone

回答

1

可以糾正格式:

public static void main(String[] args) throws ParseException { 
    String input = "20130401100000[-03:EST]"; 

    DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss'['Z':'z']'"); 
    df.setTimeZone(TimeZone.getTimeZone("GMT"));  

    System.out.println(df.format(new Date())); 
    input = input.replace(":","00:"); 
    System.out.println(df.parse(input)); 
} 

如果你有正確格式的日期與格式不正確的人混在,你可以使用:

input = input.replaceAll("(\\[[+-]\\d{2}):","$100:"); 
+0

我喜歡用'replaceAll'的解決方案,看起來優雅。謝謝 :-) –

0

JDK 7支持新模式SimpleDateFormat

具體來說,X字符增加了對ISO 8601時區的支持。

與JDK嘗試此圖案7

DateFormat的DF =新的SimpleDateFormat( 「YYYYMMDDHHMMSS '[' X ':' Z ']'」);

在JDK 7上,我得到了以下輸出。

20130602140935 [Z:GMT] 週一4月1日13:00:00 GMT 2013