在android中,如何从日期列(BIGINT)中减去时区?

在android中,如何从日期列(BIGINT)中减去时区?,android,sqlite,Android,Sqlite,我有一个带有BIGINT列(DT)的表(MYTABLE),我在其中存储时间戳。我发现它们还包含我的用户的本地时区。 我想在下一次数据库升级中去掉这些值中的时区,这样这些时间戳就可以是UNIX epoch了 我应该考虑什么样的SQL查询(对于GMT + 3查询示例)? 这样行吗 我还需要对毫秒等于零的日期值运行此更新。我是否应该将DT转换为子字符串并查找最后3个字符是否为零?正确的方法是什么?如果您的数据类型是BIGINT,那么,我必须假设您已经将日期值存储为历元时间。假设您从java.util.

我有一个带有BIGINT列(DT)的表(MYTABLE),我在其中存储时间戳。我发现它们还包含我的用户的本地时区。 我想在下一次数据库升级中去掉这些值中的时区,这样这些时间戳就可以是UNIX epoch了

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

这样行吗


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

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

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


我提出了以下sql语句:

UPDATE `MYTABLE` SET `DT` = `DT` - ? WHERE substr(CAST(`DT` AS TEXT), -3) = '000'
其中,
是用Java计算的外部变量,包含以毫秒为单位的时区


请确认这是否正常

如果它们被存储为epoch,则创建新日期(x)(x是数据库中的bigint)的新日期对象,然后使用.getHours()等方法返回为设备时区调整的小时数。。。至少我认为会……不幸的是,你的假设是错误的,我的数据是用时区存储的。我很想知道你是如何用时区存储值的,我很乐意写下整个背景故事,但这超出了这个问题的范围。
UPDATE `MYTABLE` SET `DT` = `DT` - ? WHERE substr(CAST(`DT` AS TEXT), -3) = '000'