2011-11-30 102 views
7

我第一次嘗試的日期:解析與時區 「ETC/GMT」

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); 
Date date = formatter.parse(string); 

它拋出ParseException的,所以我發現這個黑客:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); 
TimeZone timeZone = TimeZone.getTimeZone("Etc/GMT"); 
formatter.setTimeZone(timeZone); 
Date date = formatter.parse(string); 

它也不能工作,並現在我卡住了。如果我只是將時區更改爲「GMT」,它解析沒有問題。

編輯:的示例串解析會「2011-11-29 10點40分24秒ETC/GMT」

EDIT2:我寧願不完全刪除時區信息。我正在編寫一個接收來自外部用戶的日期的服務器,所以其他日期可能有其他時區。 更確切地說:我收到的這個特定日期來自蘋果服務器在iphone應用程序中進行應用程序購買後的收據,但我也可以從其他來源獲得日期。

+0

將小'z'離開。它不會考慮時區。你的代碼將正常工作! – HashimR

回答

0

下面的代碼是爲我工作

 

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
      sdf.setTimeZone(TimeZone.getTimeZone("Etc/GMT")); 
      try { System.out.println(sdf.parse("2011-09-02 10:26:35 Etc/GMT")); 
      } catch (ParseException e){ 
       e.printStackTrace(); 
      } 

+0

Damnit,由於某種原因,我剛剛得到「java.text.ParseException:Unparseable date:」2011-09-02 10:26:35 Etc/GMT「」。怎麼會這樣?我已經檢查過getTimeZone()不返回null或類似的東西。 – pgsandstrom

+0

SimpleDateFormat sdf = new SimpleDateFormat(「yyyy-MM-dd HH:mm:ss」);它會工作從for​​mater刪除區域信息 – Rupok

0

它並沒有爲我工作,要麼事情是我嘗試設置SimpleDateFormatter到「ETC/GMT」的時區,然後格式化這裏的新日期爲輸出:

2011-11-30 10時46分32秒GMT + 00:00

所以其他/ GMT被翻譯爲GMT + 00:00

如果你真的要堅持解析「2011-09-02 10時26分35秒ETC/GMT」那麼下面將幫助過,甚至沒有考慮明確時區的變化:

java.text.SimpleDateFormat isoFormat = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss 'Etc/GMT'"); 
isoFormat.parse("2010-05-23 09:01:02 Etc/GMT"); 

工作正常。

+0

我認爲問題的重點不是忽略時區,而是要考慮到它。如果字符串包含例如「 「美國/洛杉磯」時區。 –

3

不知道,如果這個問題仍然是與你有關的,但是如果你使用喬達時間,這會工作:

DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss ZZZ").parseDateTime(s) 

沒有喬達時間下面的工作(雖然有點更多的工作):

String s = "2011-11-29 10:40:24 Etc/GMT"; 

// split the input in a date and a timezone part    
int lastSpaceIndex = s.lastIndexOf(' '); 
String dateString = s.substring(0, lastSpaceIndex); 
String timeZoneString = s.substring(lastSpaceIndex + 1); 

// convert the timezone to an actual TimeZone object 
// and feed that to the formatter 
TimeZone zone = TimeZone.getTimeZone(timeZoneString); 
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
formatter.setTimeZone(zone); 

// parse the timezoneless part 
Date date = formatter.parse(dateString);