考虑以下代码:

Time time1 = new Time("America/Los_Angeles"); // UTC -8
Time time2 = new Time("Pacific/Kiritimati");  // UTC +14

time1.setToNow();
time2.setToNow();

Log.d("timetest", "America/Los_Angeles: " + time1.toMillis(false));
Log.d("timetest", "Pacific/Kiritimati : " + time2.toMillis(false));

这是获取输出的日志:
08-03 07:27:50.687: D/timetest(28411): America/Los_Angeles: 1375540070000
08-03 07:27:50.687: D/timetest(28411): Pacific/Kiritimati : 1375540070000

如您所见,毫秒值是相同的,即使由于时区而相距整整22个小时。这使我相信Time.toMillis(boolean)本身基于UTC,而不是Time的指定时区。我需要一种方法来根据Time的时区获得毫秒数。有任何想法吗?

最佳答案

自1970年1月1日00:00:00 UTC以来经过的毫秒数在所有地方都相同。无论您当前在洛杉矶还是在基里蒂马蒂,都没关系。

编辑
toMillis方法将返回自纪元以来的毫秒数。纪元是1970年1月1日UTC。

这样想吧。如果某人A时代在洛杉矶出生,而某人B时代在基里蒂马蒂出生,那么A人的年龄将是time1.toMillis(),而B人的当前年龄将是time2.toMillis(),对吗?

即使在UTC时区是他们出生时的午夜,但在各自的时区中却不是午夜。您可以从其时区UTC-8和UTC + 14看出来。

现在,如果使用time1.toMillis() != time2.toMillis(),则意味着两个人中的一个年龄较大。这意味着他一生要活多毫秒。当然不是这样,因为正如我们所说,他们是同时出生的。这就是为什么您看到的输出是正确的,我不相信您应该尝试更改它。

08-06 11:36