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