java.sql.Time getTime 没有返回好的值

标签 java time timezone

在我的程序中,我需要从数据库读取时间值,然后将该值转换为毫秒。 我这样做:

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 小时)。

提前致谢。

最佳答案

当您将数据库中的数据解析为 Time 对象时,您应该使用格式化程序,并设置正确的时区。

SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
timeFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = timeFormat.parse(dataFromDB); // dataFromDB is a "09:30:10" like String
System.out.println(timeFormat.format(date));  // will print time in HH:mm:ss format
System.out.println(date.getTime()); // will print milliseconds

关于java.sql.Time getTime 没有返回好的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27668094/

相关文章:

javascript - SQL Server 和 Javascript 之间的时区名称转换

postgresql - 为什么这些 SQL 表达式中的时区没有变化?

java - 无法解析方法 get width 和 getHeight

Java文件目录(过滤器)

java - 如何在java表单运行期间始终检查条件?

java - guice 辅助注入(inject) + 多绑定(bind) + 泛型

c++ - 如何将毫秒添加到纪元以来的持续时间?

javascript - 在使用 Meteor.js 发布到客户端之前重新采样时间数据

python - 如何将祖鲁时间换算为新纪元?

c# - 在 TimeZoneInfo 对象中本地化显示名称以显示不同文化中的时区