【问题标题】:java.sql.Time getTime does not return good valuejava.sql.Time getTime 没有返回好的值
【发布时间】: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 APILocalTime。这也将消除您的问题。

标签: java time timezone


【解决方案1】:

当您将 DB 中的数据解析为 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 2012-09-27
    • 1970-01-01
    • 2021-09-05
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多