来自不同服务器的java.sql.Time生成的不同输出

时间:2014-01-21 14:23:57

标签: java time

我在四台机器上测试了以下代码。其中两个是windows(win7和win8),两个是linux(centos)。 Windows PC上的输出是相同的(但与linux不同)。

java.sql.Time d = java.sql.Time.valueOf("19:54:17");
System.out.println(d.getTime());

Windows输出:50057000
Linux输出:93257000

Windows:java version "1.6.0_26"
Linux:java version "1.6.0_24"

机器之间的时间略有不同(2-3分钟内)。但是Windows有UTC+6,Linux有GMT+6时区。

另一个信息。我还在this online Java compiler上运行了此代码,它显示了输出93257000

我只想拥有所有机器的相同输出。我该怎么办?

更新:,因为您请求了此代码的输出System.out.println(new Date(d.getTime()))

Windows:Thu Jan 01 19:54:17 ALMT 1970
Linux:Thu Jan 01 19:54:17 GMT-06:00 1970
在线编译器:Thu Jan 01 19:54:17 CST 1970

2 个答案:

答案 0 :(得分:1)

看起来时区转换不好

50057000 = 13:54:17 = 19:56:17 - 6
93257000 = 25:54:17 = 19:56:17 + 6

不是一个真正的解决方案,但格式在评论中看起来不太好。

我认为你正在丢失valueOf方法中的时区信息。 d.getTime().toString()将根据区域设置转换时间。检查java中是否有相同的时区:

Calendar.getInstance().getTimeZone();
java.sql.Time.valueOf("19:54:17").getTimezoneOffset();

答案 1 :(得分:0)

我通过使用以下一个解决方案找到了解决方案。这使我在整个机器上的长值相同。

TimeZone.setDefault(TimeZone.getTimeZone("PST"));

有关此内容的详细信息,请访问http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4487450