Java valueOf()根据JVM版本返回不同的值

Java valueOf()根据JVM版本返回不同的值,java,datetime,Java,Datetime,为什么这两个值不同?根据Sun网站上一篇现已删除的帖子 夏令时(DST)是一种处理不断变化的气候变化的系统 全年的日照量。DST的目标是 最大限度地利用典型醒着时间的白天时间。通过 人们可以将时钟提前一个标准量,通常是一小时 在他们典型的工作日有更多的日光。对于 例如,假设您每天早上7:00醒来。在春天,太阳 每天早起。而不是早上6点起床 利用日光的优势,DST观察员将时钟提前一个小时 小时。结果是他们可以在早上7点继续醒来 根据时钟,享受更多的日光。秋天,人们 因为每天日出晚,所以把他们的时钟

为什么这两个值不同?

根据Sun网站上一篇现已删除的帖子

夏令时(DST)是一种处理不断变化的气候变化的系统 全年的日照量。DST的目标是 最大限度地利用典型醒着时间的白天时间。通过 人们可以将时钟提前一个标准量,通常是一小时 在他们典型的工作日有更多的日光。对于 例如,假设您每天早上7:00醒来。在春天,太阳 每天早起。而不是早上6点起床 利用日光的优势,DST观察员将时钟提前一个小时 小时。结果是他们可以在早上7点继续醒来 根据时钟,享受更多的日光。秋天,人们 因为每天日出晚,所以把他们的时钟拨慢一小时

美国计划从一开始就改变其DST的遵守情况 2007年。2005年《能源政策法案》规定DST将于 三月的第二个星期日,在十一月的第一个星期日结束。在里面 2007年起止日期为3月11日和11月4日, 分别地这些日期与以前的DST开始和结束日期不同 停止约会。2006年,日期是4月(4月)的第一个星期日 10月的最后一个星期日(2006年10月29日)

Java运行时环境(JRE)存储有关遵守DST的规则 遍布全球。旧的JRE将有过时的规则 被2005年《能源政策法》取代。因此,应用程序 从2007年3月11日起,在较旧的JRE上运行可能会报告错误的时间 至2007年4月2日和2007年10月29日至11月4日, 二百


该更改在Java 1.4.2_13中进行了更新。因此,如果您的版本较旧,那么您将看到不同的行为。

我认为这是因为1.4可能不支持时区历史更改()。问题是时间戳在本地时区解析时间,而您所在地区的时区在1900年是不同的,1.4没有考虑到,但1.5做到了

Jon Skeet会知道这一点:)@MartijnCourteaux Jon Skeet只知道基本的编程和简单的OOP概念^ ^ JDK 1.6===>-2177452800000奇怪的是,区别仅仅是半小时。根据wiki,只有极少数地方使用30分钟的DTS轮班。
Timestamp.valueOf
使用计算机的本地时区(因为它使用了不推荐使用的超类
java.util.Date的6参数构造函数)-除非我们知道OP的时区,否则很难做出结论性的回答。@GokulNath,因为它本质上是一个仅链接的答案。如果这个链接断了,答案就没用了。common@joelwitteven。我正在等待编辑,然后才开始upvote@JoelWitteveen如果你只引用答案并稍加解释,你会得到我的+1。我不确定这是否正确。1900-12-31将永远不会是DST,无论JVM版本如何。所以不会有差异。
Timestamp sTs = Timestamp.valueOf("1900-12-31 23:59:59.999"); // Make Timestamp
System.out.println("sTs====>" + sTs.getTime());

sTs====> -2177485200001  // in jdk 1.4


Timestamp sTs = Timestamp.valueOf("1900-12-31 23:59:59.999"); // Make Timestamp
System.out.println("sTs====>" + sTs.getTime());

sTs====> -2177483400001  // in jdk 1.5