2012-11-07 13 views
4

我使用的是Web服務和巴西的弗洛里亞諾波利斯市,我得到了以下日期:如何用Java中的模糊時區分析日期和時間?

星期二,2012 11月06日下午5:30 LST

現在的時區「LST」創建的一個問題SimpleDateFormat解析器:

// Date to parse 
String dateString = "Tue, 06 Nov 2012 5:30 pm LST"; 

// This parser works with other timezones 
SimpleDateFormat LONG_DATE = new SimpleDateFormat("EEE, d MMM yyyy h:mm a zzz"); 

// Here it throws a ParseException 
Date date = LONG_DATE.parse(dateString); 

我知道時區可能很難解析。你有什麼建議?

謝謝

+3

可以使用約達時間或四個字母時區來代替。許多三個字母的時區有多重意義。 LST可以表示月球標準時間,本地恆星時間(在拉脫維亞使用)或本地太陽時間。 –

+0

彼得你是對的,即使喬達時間放棄在這些時區的解析...... –

+1

你可以嘗試'解析(dateString.replace(「LST」,「BRST」));' –

回答

0

我目前的解決方法是:

// Date to parse 
String dateString = "Tue, 06 Nov 2012 5:30 pm LST"; 

// This parser works with some timezones but fails with ambiguous ones... 
DateFormat dateFormat = new SimpleDateFormat("EEE, d MMM yyyy h:mm a zzz"); 

Date date = null; 
try { 
    // Try to parse normally 
    date = dateFormat.parse(dateString); 
} catch (ParseException e) { 
    // Failed, try to parse with a GMT timezone as a workaround. 
    // Replace the last 3 characters with "GMT" 
    dateString = dateString.replaceFirst("...$", "GMT"); 
    // Parse again 
    date = dateFormat.parse(dateString); 
} 
2

試試這個

DateFormat gmtFormat = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z"); 

TimeZone gmtTime = TimeZone.getTimeZone("GMT-02:00"); 
gmtFormat.setTimeZone(gmtTime); 

System.out.println("Brazil :: " + gmtFormat.format(new Date())); 
+0

爲什麼你把GMT-02:00而不僅僅是GMT? –

+0

另外我試了一下,它仍然會拋出ParseException ... –

+0

@erasmospunk:那是因爲GMT-02:00指定了巴西的時區。有關時區的更多信息,請參閱此鏈接[TimeZone Explained](http://en.wikipedia.org/wiki/Time_zone) –