2014-12-27 52 views
0

在我的程序中,我需要从数据库中读取一个Time值,然后将该值转换为毫秒。 我不喜欢这样写道:java.sql.Time getTime不会返回好值

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

在此先感谢。

+0

在DB不是9:30。在数据库中的毫秒数和你看到的9:30只是格式化的值。所述格式是基于时区的,数据库中将会有一个格式,并且可能会有一个用于显示数据的客户端连接。 – Michal 2014-12-27 14:52:07

+0

我重新读你的问题。关键是,对于您的TZ,09:30:00的正确值为30600000.如果这是您的要点,请使用UTC作为TZ。 – Michal 2014-12-27 14:57:23

+0

什么数据库?什么是列的数据类型,*完全*? – 2014-12-27 18:31:37

回答

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