2017-04-19 32 views
-2

我在後端生成一些UTC時間,並使用websockets將它發送到我的Android應用程序。錯誤的時區信息與Java JodaTime

問題是:當我顯示日期時,它的背後是3小時,這是因爲我假設我的手機處於+3時區。

下面是來自後臺代碼和Android代碼的摘錄。

後端代碼(這就是如何我現在用的那一刻庫生成UTC日期):

let d = moment.utc().toISOString(); 

在我的Android應用程序,這是怎麼了處理它:

String sendDate = "2017-04-19T15:41:36.758Z"; //this is an example server response 
DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 
dtf.parseLocalDateTime(sendDate).toDate() 

的問題是UTC日期未正確顯示/轉換爲手機當前所在的時區,因此日期始終延遲3小時。

我錯過了什麼?

+0

你檢查手機的默認'TimeZone'('DateTimeZone.getDefault()'的結果)? – 2017-04-19 16:30:21

+0

什麼是你得到輸出vs預期輸出? – 2017-04-19 16:44:37

+1

嘗試'dtf.parseLocalDateTime(sendDate).toDate(DateTimeZone.UTC)',因爲我害怕沒有參數的'toDate()'隱式使用系統時區(Joda-Time的數據)。並且你的'LocalDateTime'顯然是基於UTC輸入的...... –

回答

0

解決方案是爲toDate()方法指定一個時區。

dtf.parseLocalDateTime(sendDate).toDate(DateTimeZone.UTC.toT‌​‌​imeZone())