【发布时间】:2014-12-27 14:18:21
【问题描述】:
在我的程序中,我需要从数据库中读取一个时间值,然后将该值转换为毫秒。 我这样做:
Time t = getTimeFromDatabase();
long millis = t.getTime();
问题是millis的值对应的时间值比数据库中输入的时间值早1小时。
例如:假设数据库中的值为 09:30:00。所以如果我这样做:
Time t = getTimeFromDatabase();
System.out.println(t.toString);
System.out.println(t.getTime);
输出将是:
09:30:00
30600000
现在... 09:30:00 可以。数据库中就是这样。
但是30600000 / 3600000 = 8.5(3600000 是每小时毫秒)。这意味着这个以毫秒为单位的值对应于 08:30:00。
09:30:00 的正确值应该是 34200000。
我的问题是,无论时区如何,我如何才能获得正确的值(我在 UTC +1,所以我想这与我的问题有关)。
我尝试过使用其他时间值,但始终相同(提前 1 小时)。
提前致谢。
【问题讨论】:
-
在数据库中根本不是 9:30。在数据库中是毫秒数,您看到的 9:30 只是格式化值。上述格式是基于时区的,在数据库中会有一个,在客户端连接上可能会有一个,用于向您显示数据。
-
我重新阅读了您的问题。关键是,对于您的 TZ,09:30:00 的正确值是 30600000。如果这是您的观点,请使用 UTC 作为 TZ。
-
什么数据库?什么是列的数据类型,究竟?
-
我建议你不要使用
java.sql.Time。该课程设计不良且早已过时。而是使用来自java.time, the modern Java date and time API 的LocalTime。这也将消除您的问题。