2012-05-22 3 views
0

Моя проблема в два раза. Я стараюсь справиться с этим как можно шире.Как я могу обрабатывать зависящие от даты статус активации в БД?

Дайте дату ниже формате,

YYYYMMDD hh:mm:ss 

как я могу найти соответствующую дату переменное число дней прочь? Например, если задана дата, мне нужно будет найти соответствующую дату этого формата «х» дней.

Эта сгенерированная дата - это то, что я буду хранить в столбце activation_date в базе данных. Затем я хочу каждую ночь запрашивать базу данных, чтобы узнать, еще ли она такая дата. Если это так, я бы изменил статус элемента в другом столбце от ожидающего до активного.

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

Альтернативой может быть то, что я создаю столбец days_till_activation в БД и имею скрипт, который ночью уменьшает значение в этом столбце для каждой записи до тех пор, пока не будет достигнут нуль. После достижения нуля скрипт изменит статус. Проблема в том, что это похоже на действительно плохой способ борьбы с базой данных. Это связано с большим количеством записи в базу данных, а не только при необходимости.

В любом случае, любые мысли будут оценены. Мне нужно обработать решение в java, но псевдокод будет в порядке.

+0

Хочет 'days' разницу между текущим днем ​​и дата сохранена? – Asif

ответ

1

Дайте дату ниже формате,

YYYYMMDD hh:mm:ss 

Это ваш первая проблема. Не думайте о датах в определенном формате. Убедитесь, что ваша схема базы данных использует соответствующий тип поля даты/времени и также использует соответствующий тип в вашем коде Java. Вам не нужно будет видеть строковое представление, если вы не показываете его пользователю.

К счастью, эта часть легко:

как я могу найти соответствующую дату переменное число дней прочь?

Я бы предложил использовать Joda Time, чтобы представить ваши даты и время как можно дальше. Это делает его легко:

LocalDate date = ...; 
LocalDate activation = date.plusDays(activationDays); 

Вы могли просто использовать java.util.Date/Calendar для этого, но я хотел бы предложить преобразовать к типам Joda времени, как только вы можете при извлечении данных из базы данных, и преобразовать обратно в родные типы Java в последний момент. Таким образом, вы можете избежать отвратительности типов Java как можно больше времени.

+0

+1 для указания полей 'date/time' в базе данных и в' java' code..and также для указания времени Joda .. это действительно выход из множества проблем Date \ Time – Asif

0

В таких ситуациях я бы выбрал столбец целочисленного типа с меткой истечения срока действия (currentTimeMilis() + x * MILLIES_PER_DAY), что сделало ваш запрос очень простым (where expiration < ?, привязывая параметр к currentTimeMilis().)

Chosing для столбца типа даты/времени добавляет сложности в решение делает поведение зависит от времени установки (изменений языка операционной системы база данных могут сделать разницу.)