Java.sql.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时区。

另一个信息。我还在此在线Java编译器上运行了此代码,它显示了输出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

看起来像timezone的不良转换

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();

我通过将以下一个与我的一个使用以下一个找到解决方案。这使我在整个机器中的长度价值相同。

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

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

最新更新