Java vs. Javascript timeline deviation for old dates (3600 seconds)

When converting a string date representation to numeric values, I get a different result in Java / Groovy / PHP and in Javascript. For some dates before 1970, the JS timestamp is exactly 3600 seconds before the Java timestamp. I can reproduce it on October 1, but on January 1 everything is in order.

My test case (in groovy, using the regular 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}"
}

and in JS (I just run it from the Chrome console - β€œ9” here in October):

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

A few samples:

* Groovy

  • 01/10/1956 β†’ -418179600000
  • 01/01/1956 β†’ -441853200000
  • 01/10/1978 β†’ 276040800000

* Javascript

  • 1956,9,1,0,0,0 β†’ -418183200000
  • 1956,0,1,0,0,0 β†’ -441853200000
  • 1978,9,1,0,0,0 β†’ 276040800000

= > , 01/10/1956 , 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   
0
2

, , , ) .

Java/ Groovy.

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

- . http://www.bbc.co.uk/news/world-12849630

, 1970/01/01 00:00 UTC. , , , BST ( ). 1968 1971 : P http://www.timeanddate.com/time/uk/time-zone-background.html

, adhoc. UTC , " " "Temps Universel CoordonnΓ©" , , , , UTC, . http://en.wikipedia.org/wiki/Coordinated_Universal_Time

+2

Source: https://habr.com/ru/post/1617757/


All Articles