Подтвердить что ты не робот

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

где был дополнительный час?

4b9b3361

Ответ 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()))