2013-07-14 2 views
0

У меня есть таблица (MYTABLE) с колонкой BIGINT (DT), где хранятся временные метки. Я узнал, что они также содержат локальный часовой пояс моих пользователей. Я хочу избавиться от часового пояса от этих значений в моем следующем обновлении базы данных, чтобы эти временные метки были эпохой UNIX.Как вычесть часовой пояс из столбца DATE (BIGINT) в android?

Какой SQL-запрос следует учитывать (для примера запроса GMT + 3)?

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

В порядке?

Мне также нужно запустить это ОБНОВЛЕНИЕ для значений даты, для которых миллисекунды равны нулю. Должен ли я конвертировать 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.Date и System.currentTimeInMillis() оба независимы от часового пояса.

Похоже, что это больше проблема отображения, и вам нужно убедиться, что вы показываете значение даты в нужном часовом поясе.

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

+0

Если они сохранены как эпоха, создавая новые объекты Date с новой датой (x) (x является bigint из db), а затем с использованием m такие методы, как .getHours(), вернут часы, скорректированные для часовой пояс устройства ... По крайней мере, я думаю, что это ... –

+0

К сожалению, ваше предположение о неправильном и моих данных сохраняется в часовом поясе. –

+0

Мне любопытно узнать, как сохранить значения с часовым поясом –

Смежные вопросы