我有一個應用程序,我需要在當地時間顯示事件,而不是位於用戶的時區,但位於事件發生的時區。我以ISO-8601格式獲得時間,包括時區偏移量。時區不是恆定的,我顯示的每個事件可以有不同的(它們代表航班起飛和到達時間)。在GWT中顯示當地時間
例如,我有「2014-02-05T09:00-08:00」,我想將其顯示爲「上午9:00」。
我的第一個,天真的代碼是這樣的:
private static final DateTimeFormat ISO_TIME_FORMAT =
DateTimeFormat.getFormat("yyyy-MM-dd'T'HH:mmZZZ");
private static final DateTimeFormat TIME_OF_DAY_FORMAT =
DateTimeFormat.getFormat(PredefinedFormat.HOUR_MINUTE);
public static String formatTimeOfDay(String iso8601Time) {
return TIME_OF_DAY_FORMAT.format(QPX_TIME_FORMAT.parse(iso8601Time));
}
但是,這顯示在用戶時區的時間,在我的情況「上午6:00」,因爲我在美國東部來的。
看看GWT的參考,它看起來像我需要得到基於ISO-8601日期的正確時區,但我不清楚如何做到這一點。我試過
public static String formatTimeOfDay(String isoTime) {
Date date = QPX_TIME_FORMAT.parse(isoTime);
String tzoneStr = qpxTime.substring(16);
TimeZone tzone = TimeZone.createTimeZone(tzoneStr);
return TIME_OF_DAY_FORMAT.format(date, tzone);
}
但我得到一個「錯誤解析JSON:SyntaxError:意外的數字-05:00」異常。看起來我應該能夠從輸入字符串中解析Date和TimeZone,因爲它包含了編碼的所有信息。
在這一點上,最簡單的事情似乎是直接從輸入時間通過isoTime.substring(11,16)提取時間。這意味着我將不得不編寫一個自定義分析器來從24小時轉換爲am/pm格式,但這可能是最簡單的。
還有其他建議嗎?