我已经在四台机器中测试了以下代码。其中两个是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