【发布时间】:2017-04-19 15:46:35
【问题描述】:
我正在后端生成一些 UTC 时间并使用 websockets 将其发送到我的 Android 应用程序。
问题是:当我显示日期时,它落后了 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 小时。
我错过了什么?
【问题讨论】:
-
你检查过手机默认的
TimeZone(DateTimeZone.getDefault()的结果)吗? -
你得到的输出和预期的输出是什么?
-
试试
dtf.parseLocalDateTime(sendDate).toDate(DateTimeZone.UTC)因为我担心toDate()不带参数会隐式使用系统时区(使用Joda-Time 的数据)。而您的LocalDateTime显然是基于UTC 输入... -
@MenoHochschild 只是一个小细节,
LocalDateTime.toDate方法将java.util.TimeZone作为参数(根据javadoc,对于joda-time >= 2.3),所以调用将是dtf.parseLocalDateTime(sendDate).toDate(DateTimeZone.UTC.toTimeZone()).但我不确定这是否是 OP 想要的 -
@Hugo 你是对的,我忽略了它,很惊讶 Joda-Time 真的在这个地方使用旧的 API。而且这两种方法也没有很好的记录。所以 OP 需要测试。
标签: android node.js date momentjs jodatime