0

所以我有一个非常简单但令人讨厌的问题。我正在创建一个日期对象并调用 getHours() 方法,返回似乎总是为零。也许我做错了什么?

var d:Date = new Date(1382166000000); // 10 / 19 / 13 @ 2:00:00am EST
trace(d.getTime() + " : " + d.getHours());

//output: 1382166000000 : 0

有任何想法吗?除非我非常困惑,否则 getHours 不应该返回 2 吗?

4

1 回答 1

2

Date不像你想象的那样工作。它可以以两种格式之一存在:当地时间或 UTC。

getHours()方法返回本地时间,或根据计算机的内部时区偏移格式化的 UTC 时间。您过去的时间实际上是 UTC 时间早上 7 点。所以按照这个逻辑,你(和我)在 PST(或 UTC-7)。如果你运行d.timezoneOffset,它应该返回420,即 7 小时的分钟数。

现在,大多数时候你不想使用除 UTC 之外的任何东西(UTC 是一个常数,尤其是在计算机中)所以忘记getHours()方法,getUTCHours()转而看。

trace(d.getTime() + " : " + d.getUTCHours ()); // output 1382166000000 : 7

因此,这将为您提供 UTC 小时的时间。接下来,您必须确定要将其格式化为哪个时区。EST 是 UTC-5,因此您想从 UTC 小时数中减去 5。

trace(d.getTime() + " : " + ( d.getUTCHours () - 5 )); // output 1382166000000 : 2

这正是您所期望的。

重申一下:AS3 的Date课程不允许设置时区。您只能访问 UTC 和本地时区的时间。而已。如果您想要任何其他时区的时间,您需要手动格式化它,就像我在上面所做的那样。

于 2013-10-18T23:20:55.490 回答