我會解析出來並單獨解釋時區信息,然後用它在適當的時區構造日期/日曆對象。
下面的代碼似乎工作不夠好你的榜樣:
String source = "Wed Aug 17 2011 09:57:09 GMT+0100 (BST)";
String tzid = "GMT" + source.substring(28, 31)
+ ":" + source.substring(31, 33);
TimeZone tz = TimeZone.getTimeZone(tzid);
// if (tz == null) ?
SimpleDateFormat f = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss");
f.setTimeZone(tz);
Date date = f.parse(source);
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
System.out.println(date);
打印"Wed Aug 17 08:57:09 UTC 2011"
。
更復雜的方法是使用正則表達式提取時區偏移的各個部分(「+/-」,「hh」和「mm」)。
或者,您也可以嘗試辨別3個字母時區ID(在(
和)
之間的字符串),並使用相應的Java TimeZone
如果它存在。
在你的具體例子中,"BST"
解析爲孟加拉國時間,即格林威治標準時間+0600,所以你最好用數字偏移量。 "BST"
這裏應該是英國夏令時(GMT + 0100)。這可能很重要,因爲數字偏移量不表示使用夏令時,可根據日期生效。
更具啓發性的例程可能會考慮到這一點,並嘗試首先解析名稱,但驗證GMT偏移是否匹配,否則返回簡單的"GMT+hh:mm"
時區。
康拉德,謝謝,我試了一下格式EEE MMM DD YYYY HH:MM:SS「GMT」 Z和這似乎仍然沒有工作。你能詳細說明'z'在小時和分鐘之間需要冒號嗎? – user898465 2011-08-17 11:45:37