时间戳偏差Java与JavaScript的旧日期(3600secs)
将字符串日期表示形式转换为数值时,我在Java / Groovy / PHP和Javascript中获得了不同的结果。 对于1970年以前的某些日期,JS时间戳在Java时间戳之前恰好是3600秒。 我可以在10月1日复制它,但1月1日没关系。
我的测试用例(在groovy中,故意使用常用的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”是10月在这里):
new Date(1956, 9, 1, 0, 0, 0).getTime()
一些样品:
* Groovy的
*使用Javascript
=>注意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
你的个人资料说你来自比利时。
布鲁塞尔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不是。
关于时区的信息非常复杂,您会惊奇地发现a)它们发生了变化,b)它们不准确。
我也会在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年2月至1971年11月。:P http://www.timeanddate.com/time/uk/time-zone -background.html
你越了解时间和日期,你越是意识到它所有的东西都是特别的。 即使UTC不是首字母缩写词,它的意思是英语中的“协调世界时”和法语中的“Temps UniverselCoordonné”,并且因为他们无法就缩写词达成一致,所以妥协不是UTC。 http://en.wikipedia.org/wiki/Coordinated_Universal_Time
链接地址: http://www.djcxy.com/p/3105.html上一篇: Timestamp deviation Java vs Javascript for old dates (3600secs)
下一篇: f:convertDateTime displays wrong Date if timezone is provided by a bean