我在四台机器上测试了以下代码。其中两个是 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 版本“1.6.0_26”
Linux:Java 版本“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:1970 年 1 月 1 日星期四 19:54:17 ALMT
Linux:1970 年 1 月 1 日星期四 19:54:17 GMT-06:00
在线编译器:Thu Jan 01 19:54:17 CST 1970
最佳答案
看起来像错误的时区转换
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();
关于java - 来自不同服务器的 java.sql.Time 生成的不同输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21260793/