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

标签 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 版本“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/

相关文章:

java - 当我们在 Collections.synchronizedMap() 中传递哈希表时会发生什么

java - 使用随机数的硬币抛掷看起来并不完全随机

ios - NSJSONSerialization解析数据问题

java - 为什么为一个目的创建 HandlerThread : to pass it's Looper to a new Handler

java - Android解析XML文档时为空

php - 计算 php 所用时间 - 跨度超过 24 小时

string - 显示没有毫秒的 CFGregorianDate

c++ - _get_timezone 如何工作?

java - 他们是如何在 Android 上制作 imo/ebuddy 应用程序的?

python - 在 Python 中,使用 win32api 没有设置正确的日期