将字符串日期表示形式转换为数值时,我在Java / Groovy / PHP和Javascript中获得了不同的结果。对于1970年之前的某些日期,JS时间戳恰好比Java时间戳早3600秒。我可以在10月1日重制它,但是在1月1日还可以。

我的测试用例(通常,故意使用常规Java API):

def sdf = new SimpleDateFormat("dd/MM/yyyy")
["01/10/1956", "01/01/1956", "01/10/1978"].each {
    def d = sdf.parse(it)
    println "${it} -> ${d.time}"
}


并且在JS中(我只是从Chrome控制台运行它-“ 9”是十月份):

new Date(1956, 9, 1, 0, 0, 0).getTime()


一些样本:

*时髦


1956年1月10日-> -418179600000
01/01/1956-> -441853200000
1978年1月10日-> 276040800000


* JavaScript


1956,9,1,0,0,0-> -418183200000
1956,0,1,0,0,0-> -441853200000
1978,9,1,0,0,0-> 276040800000


=>注意1956年1月10日的转换方式不同,产生了3600秒的差异。

夏令时或时区将是完美的元凶,但我不明白为什么两个宇宙在过去的某个时候会发生分歧。

任何提示欢迎!

谢谢

编辑更多样本

* Java / Groovy

01/01/1974 -> 126226800000
01/10/1974 -> 149814000000
01/01/1976 -> 189298800000
01/10/1976 -> 212972400000
01/01/1978 -> 252457200000
01/10/1978 -> 276040800000


* JS

new Date(1974, 0, 1, 0, 0, 0).getTime()    126226800000
new Date(1974, 9, 1, 0, 0, 0).getTime()    149814000000
new Date(1976, 0, 1, 0, 0, 0).getTime()    189298800000
new Date(1976, 9, 1, 0, 0, 0).getTime()    212972400000
new Date(1978, 0, 1, 0, 0, 0).getTime()    252457200000
new Date(1978, 9, 1, 0, 0, 0).getTime()    276040800000


1967〜1971年左右

01/01/1967 -> -94698000000
01/04/1967 -> -86922000000
01/10/1967 -> -71110800000
01/01/1968 -> -63162000000
01/04/1968 -> -55299600000
01/10/1968 -> -39488400000
01/01/1971 -> 31532400000
01/10/1971 -> 55119600000

new Date(1967, 0, 1, 0, 0, 0).getTime()   -94698000000
new Date(1967, 3, 1, 0, 0, 0).getTime()   -86925600000
new Date(1967, 9, 1, 0, 0, 0).getTime()   -71114400000
new Date(1968, 0, 1, 0, 0, 0).getTime()   -63162000000
new Date(1968, 3, 1, 0, 0, 0).getTime()   -55303200000
new Date(1968, 9, 1, 0, 0, 0).getTime()   -39492000000
new Date(1971, 0, 1, 0, 0, 0).getTime()   31532400000
new Date(1971, 9, 1, 0, 0, 0).getTime()   55119600000

最佳答案

您的个人资料显示您来自比利时。

1976年布鲁塞尔没有夏令时:

http://www.timeanddate.com/worldclock/clockchange.html?n=48&year=1976

但是从1977年开始:

http://www.timeanddate.com/worldclock/clockchange.html?n=48&year=1977

Java可能知道这一点,而JavaScript则没有。

10-06 12:30