2017-04-19 33 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())