我有一些返回 JSON 的 C# Web 服务。.NET JavaScriptSerializer 以纪元时间(自 1970 年以来的毫秒数)返回日期。在任何 Windows 机器上,基于 Web 的应用程序都会将毫秒数处理回正确的日期,而不会出现问题。
在我的 Mac 上,日期有时会相差 1 小时。不是每次。只有某些时候。这现在也发生在我正在构建的 iPhone 前端。
起初我以为我在将毫秒除以 1000 以创建有效的 Objective-C NSDate 对象时丢失了一些精度。然后我在 Mac Firefox 上使用相同的时间戳测试了 javascript 中的日期创建,并获得了相同的 1 小时偏移量。
有任何想法吗?谢谢...
编辑:我还在 XCode 的控制台中注意到创建的日期旁边有一个 -4 或 -5。我假设这是一个 GMT 偏移量。这些似乎与日期是否偏移 1 小时无关。所以一些 -4 日期和一些 -5 日期是正确的,并且其中一些日期是偏移的。
编辑:使用示例:
console.log(new Date(-1173643200000));
返回 1932 年 10 月 23 日星期日 00:00:00 GMT-0400 (EST)
console.log(new Date(-1031515200000));
返回 1937 年 4 月 24 日星期六 23:00:00 GMT-0500 (EST)
NSDate* date = [NSDate dateWithTimeIntervalSince1970:ticks / 1000];
-589320000000 =
1951-04-30 00:00:00 -0400
-1173643200000 =
1932-10-22 23:00:00 -0500
(这个在 Firebug 控制台中返回正确,在 XCode 控制台中返回错误)
-1303416000000 =
1928-09-12 00:00:00 -0400
-1492545600000 =
1922-09-15 00:00:00 -0400
-1263668400000 =
1929-12-16 00:00:00 -0500
-1252094400000 =
1930-04-29 00:00:00 -0400
-1046458800000 =
1936-11-03 00:00:00 -0500
-1298746800000 =
1928-11-05 00:00:00 -0500
-1031515200000 =
1937-04-24 23:00:00 -0500
(在 Firebug 控制台和 XCode 控制台中都返回错误)
-910465200000 =
1941-02-24 00:00:00 -0500
-1152648000000 =
1933-06-23 00:00:00 -0400
-1109793600000 =
1934-10-31 23:00:00 -0500
Microsoft/Mozilla/Apple 是否有可能在定义夏令时开始时有冲突的规则?
编辑: Mac Firefox 和 Windows Firefox 得到 -1031515200000 的不同结果。两台机器都设置为相同的时区。