используя тип даты в Java - PullRequest
       7

используя тип даты в Java

4 голосов
/ 14 ноября 2011

Я пытаюсь получить две даты из SQL-запроса и сравнить их. Поэтому, чтобы сравнить их, я считаю, что мне нужно будет использовать тип «Дата». Вот то, что я пытаюсь, я знаю, что я получаю дату из результата. Установите неправильно, но я не уверен, как это сделать.

Date validDate = new Date(0);
Date currentDate = new Date(0);

// query

    if (result.next()) {

    validDate  = (result.getObject("validDate")!=null)?result.getObject("validDate").toDate():"";
    currentDate = (result.getObject("currentDate")!=null)?result.getObject("currentDate").toDate():"";
}

if (currentDate > validDate) {
    //do something
}

Итак, это была моя попытка, но я не могу заставить ее работать. Заранее спасибо.

РЕДАКТИРОВАТЬ: запрос имеет TO_CHAR ( столбец , «ММ-ДД-ГГГГ») в две даты, которые я получаю.

Ответы [ 6 ]

4 голосов
/ 14 ноября 2011

РЕДАКТИРОВАТЬ: Теперь вы упомянули, что ваш запрос преобразует дату в строку, прекратите делать это .В конечном итоге вы будете повторно обрабатывать его на вызывающей стороне - так зачем бессмысленно выполнять два преобразования?Сохраняйте преобразования строк до абсолютного минимума - оставайтесь в наиболее подходящем типе данных, где это возможно.


Исходный ответ

Вы не показали, что resultесть, но вы, вероятно, хотите, чтобы что-то вроде ResultSet.getDate() извлекало значения даты.

Обратите внимание, что ваш код сравнение также не будет работать, потому что нет > для Date - вам понадобится что-то вроде:

if (currentDate.after(validDate))

Или извлеките базовое число миллис:

if (currentDate.getTime() > validDate.getTime())

Дополнительно:

  • Вы не можете присвоить "" переменной Date - строка не является Date.
  • Вы можете просто вызвать ResultSet.getDate() и проверить, является ли возвращаемое значение null, а несначала getObject и , затем getDate()
1 голос
/ 14 ноября 2011

В вашем коде есть как минимум три неправильные вещи:

  • "" - это литерал String, поэтому вы не можете использовать его в своих троичных выражениях для назначения переменной типаDate - используйте null вместо этого, чтобы вам не нужно троичное
  • ResultSet.getObject() возвращает Object, в котором нет метода toDate().Вместо этого просто используйте ResultSet.getDate()
  • Вы не можете сравнивать Date экземпляров, используя оператор >.Вы должны использовать before() и after() методы Date класса

Принимая все это вместе, может работать следующий код:

Date validDate = new Date(0);
Date currentDate = new Date(0);

if (result.next()) {
    validDate  = result.getDate("validDate");
    currentDate = result.getDate("currentDate");
}
if (currentDate.after(validDate)) {
    //do something
}

The *В предложении 1027 * может потребоваться дополнительная логика для обработки значений null.Лучше сделать это, чем оставить это для неявных преобразований тоже.

1 голос
/ 14 ноября 2011

, если ваш результирующий объект ResultSet, то

Date validDate = result.getTimestamp("validDate"); 
Date currentDate= result.getTimestamp("currentDate"); 
// you can add null checks here too....
// you can also use if (currentDate.getTime() > validDate.getTime()){}
if (currentDate.before(validDate)) { 
 //some code inhere...
}
1 голос
/ 14 ноября 2011

Некоторые неприятные вещи могут происходить при доступе к датам через метод getObject. Вы должны попытаться использовать методы rs.getTimestamp (с timeinfo) или rs.getDate (без timeinfo).

Кроме того, из-за довольно сложной иерархии объектов Date вы должны сравнивать даты только с помощью метода date1.compareTo(date2) > 0.

1 голос
/ 14 ноября 2011

Для сравнения дат я всегда использую методы до и после даты.

1 голос
/ 14 ноября 2011

Попробуйте currentDate.after (validDate)

...