2013-07-14 30 views
0

我有一个表(MYTABLE)与BIGINT列(DT),我存储时间戳。我发现这些也包含我的用户的本地时区。 我想在我的下一次数据库升级中从这些值中删除时区,以便这些时间戳将成为UNIX时代。如何从android中的DATE列(BIGINT)中减去时区?

我应该考虑什么SQL查询(对于GMT + 3查询示例)?

UPDATE `MYTABLE` SET `DT` = `DT` - (3 * 3600000) 

可以吗?

我还需要运行此UPDATE日期值的毫秒等于零。我应该将DT转换为子串并查找最后3个字符为零吗?什么是正确的方式?

回答

0

我想出了这个SQL语句:

UPDATE `MYTABLE` SET `DT` = `DT` - ? WHERE substr(CAST(`DT` AS TEXT), -3) = '000' 

其中?是外部变量的Java计算包含以毫秒为单位的时间段

请人确认这是否是OK

0

如果您的数据类型是BIGINT,那么我将不得不假设您已经将日期值存储为历元时间。假设您从java.util.Date的getTime()方法或System.currentTimeInMillis()获得了该值,则数据库似乎不包含时区信息,因为java.util.DateSystem.currentTimeInMillis()都与时区无关。

看起来更像是显示问题,您需要确保在正确的时区显示日期值。

Look at version of SimpleDateFormat constructor that accepts Locale as parameter.

+0

如果它们以时代形式存储,并使用新的Date(x)(x是db中的bigint)创建新的Date对象,然后使用m类似.getHours()的方法将返回针对设备时区调整的小时数...至少我认为它会... –

+0

不幸的是,您错误的假设和我的数据与时区一起存储。 –

+0

我很想知道你如何用时区存储数值 –