2012-07-18 136 views
0

我有一个数据库,其中包含需要运行某些进程的时间 我做了一个查询,该查询给出了当前时间和我应该运行该进程的时间之间的差异 例如,我可能会得到这个数字23:49:44.835,这意味着我需要在大约23小时内运行这个过程。 我想在毫秒这个过程中,所以我做了这个将日期转换为毫秒

Date Date = (java.util.Date) (InMsgTstable[index][0]); 
long Value3 = Date.getTime(); 

的日期值我得到的是正确的,但它丢弃存储在我的数据库的毫秒数。 我想得到这个小时数/分钟等等。以毫秒为单位,所以我可以把这个数字作为一个毫秒的延迟在一个调度器。但是,这给了我毫秒的错误值。 任何提示?

+0

为了澄清,你得到的数字是关闭高达+ 999毫巴,对不对?你并不是说你的数字是由一个*因数*为1000 ... – 2012-07-18 20:08:22

+0

我在这里有点困惑。你在'Date'对象中得到正确的小时,​​分​​钟,秒和毫秒? – Keppil 2012-07-18 20:15:11

+0

以及它现在,如果我有以下几个小时,我得到以下毫秒22:38:56 99536699如果我转换我看到大约5个小时了。不太确定这是什么原因。也我不知道,如果getTime获得自1970年以来的时间,因为我不想那 – Lemonio 2012-07-18 20:20:25

回答

1

如果您在控制数据库表,我会将列类型更改为整数类型,并以毫秒为单位存储整数值的时间戳。

这将允许您将该值作为DateCalendar本机使用的时间戳,而不必处理数据库在日期和时间列上执行的转换。

编辑

从您的评论上面我看到了价值,你得到的样子,因为当天(这是定义本地时间开始的毫秒数,所以在数据库时区的值提防)

使用此时间戳创建的日期位于1970年1月1日,这不是您想要的。

你可以做的是创建一个默认为“现在”的日历对象,备份到一天的开始,并获得该时间戳添加到你从数据库中获得的值,如(未经测试):

Calendar cal = Calendar.getInstance(); 

cal.set(Calendar.HOUR_OF_DAY, 0); 
cal.set(Calendar.MINUTE, 0); 
cal.set(Calendar.SECOND, 0); 
cal.set(Calendar.MILLISECOND, 0); 

long stamp = cal.getTime().getTime() + msgTableValue; 

Date dat = new Date(stamp); 

这应该给你代表msgTableValue毫秒到当前天Date对象。

+0

数据库实际上是一个kdb +数据库和日期是q对象,我可以转换为java日期 – Lemonio 2012-07-18 20:19:40

+0

@MatthewPiatetsky,实际存储在q对象?整数长整型值或日期/时间值?以长整数形式存储时间戳可以节省您对数据库存储的解释。 – rsp 2012-07-18 20:23:32

+0

不太确定,但我不能控制这个数据库我只是为它编写一个程序。 q对象用于实时大批量股票数据和东西,但是当我用一种方法引入时间时,我可以将它作为日期对象。我觉得q有自己的时间戳类或类似的东西 – Lemonio 2012-07-18 20:26:22