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

时间:2014-05-21 08:39:34

标签: java datetime

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

为什么两个值不同?

2 个答案:

答案 0 :(得分:12)

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

  

夏令时(DST)是一个处理变化的系统   全年的日光量。 DST的目标是   在典型的清醒时间内最大限度地利用白天时间。通过   调整时钟提前标准数量,通常是一个小时,人们可以   在典型的工作日期间有更多的日光。对于   例如,假设你每天早上7点起床。在春天,太阳   每天早些时候上升。而不是在早上6点醒来采取   日光的优势,DST观察员将他们的时钟向前移动   小时。结果是他们可以在早上7点继续醒来   根据时钟,享受更多的日光。在秋天,人们   将日程安排在一小时后,因为日出每天都会发生。

     

美国已经计划改变其开始的DST纪念活动   2005年的“能源政策法”规定DST将开始实施   三月的第二个星期天,十一月的第一个星期日结束。在   2007年,开始和停止日期将是3月11日和11月4日,   分别。这些日期与之前的DST开始不同   停止约会。 2006年,日期是4月的第一个星期日(4月   2006年2月2日(2006年10月29日)的最后一个星期天。

     

Java Runtime Environment(JRE)存储有关DST遵守的规则   遍布全球。较旧的JRE将具有过时的规则   被2005年的能源政策法取代。因此,申请   在较旧的JRE上运行可能会报告从2007年3月11日起的错误时间   到2007年4月2日,从2007年10月29日到11月4日,   200

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

答案 1 :(得分:10)

我认为这是因为1.4可能不支持时区历史变化(http://www.timezoneconverter.com/tzchist.html)。问题是Timestamp在当地时区解析时间,你的语言环境中的时区在1900年有所不同,其中1.4没有考虑,但1.5没有考虑