4

考虑以下代码:

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's 指定的时区。Time我需要一种方法来获取基于' 时区的毫秒数。有任何想法吗?

4

2 回答 2

5

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


编辑

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

这样想吧。如果 A 人在 epoch 出生在洛杉矶,B 人在 epoch 出生在 Kiritimati,那么 Atime1.toMillis()的年龄是 ,B 现在的年龄是time2.toMillis(),对吗?

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

现在,如果time1.toMillis() != time2.toMillis()这意味着两个人中的一个年纪较大。这将意味着他在他的生活中多活了几毫秒。当然,事实并非如此,因为正如我们所说,他们是同时出生的。这就是为什么您看到的输出是正确的,我认为您不应该尝试更改它。

于 2013-08-03T14:39:48.510 回答
0

使用Time.gmtoff包含以秒为单位的 UTC 偏移量来计算它。

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) - (time1.gmtoff * 1000)));
Log.d("timetest", "Pacific/Kiritimati : " + (time2.toMillis(false) - (time2.gmtoff * 1000)));

结果日志:

08-03 07:53:04.866: D/timetest(31414): America/Los_Angeles: 1375566784000
08-03 07:53:04.866: D/timetest(31414): Pacific/Kiritimati : 1375491184000
于 2013-08-03T14:56:42.877 回答