Java.sql.Date для преобразования времени в joda
oracle sql:
select trunc( sysdate, 'Month') month
from dual
Java:
java.sql.Date sqlDate = resultSet.getDate("month");
log.info(sqlDate);
DateTime dateTime = new DateTime(sqlDate.getTime());
log.info(dateTime);
dateTime = dateTime.withMillisOfDay(0);
log.info(dateTime);
выход:
2012-01-01
2012-01-01T 01: 00: 00.000 + 07: 00
2012-01-01T 00: 00: 00.000 + 07: 00
где был дополнительный час?
Ответы
Ответ 1
Используйте LocalDate.fromDateFields(date)
для интерпретации даты SQL как локальной (игнорируя часовую зону). Затем вы можете использовать методы на LocalDate
, чтобы получить DateTime
, если это необходимо (хотя, если ваш объект действительно является "просто датой", тогда LocalDate
- правильный объект для использования.
Ответ 2
Конструктор по умолчанию использует конструктор по умолчанию для системы, и это может вызвать проблемы с DST. Я обнаружил, что функция toDateMidnight действительно полезна при попытке убедиться, что я действительно был в полночь.
Ответ 3
Вы должны попробовать этот код.
LocalDate issueDate = new LocalDate(new Date());
System.out.println(new java.sql.Date(issueDate.toDate().getTime()))