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

时间:2014-12-27 14:18:21

标签: java time timezone

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

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

提前致谢。

1 个答案:

答案 0 :(得分: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