2012-01-13 6 views
13

Oracle SQL:java.sql.Date к времени Joda преобразования

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 : 00: 00.000 + 07: 00

2012-01-01T : 00: 00,000 + 07: 00

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

+1

Я думаю, что эта проблема с часовым поясом, проверьте с правильным часовым поясом? – Kushan

ответ

14

Использовать LocalDate.fromDateFields(date), чтобы интерпретировать дату SQL как локальную (игнорируя часовую зону). Вы можете использовать методы на LocalDate, чтобы получить DateTime, если это необходимо (хотя, если ваш объект действительно является «просто дата», то LocalDate правильный объект для использования.

+0

Просто примечание. Я имел дело с 'java.sql.Timestamp', а не' java.sql.Date', поэтому используя 'new DateTime (java.sql.Timestamp.valueOf (someSqlDate)),' сделал трюк. –

0

Конструктор по умолчанию использует конструктор по умолчанию для системы, и это может вызвать проблемы с DST. Я обнаружил, что функция toDateMidnight действительно полезна при попытке убедиться, что я нахожусь в полночь.

+0

Что делать, если время не увеличивается и вычитается? – turbanoff

+0

Можете ли вы уточнить? Я не уверен, что вы имеете в виду. 'toDateMidngith' возвращает' LocalDate' объект, и он может представлять только даты, а не времена.Это проблема? Если это так, то это может быть не то, что вы ищете. Если 'withMillisOfDay()' работает для вас, то придерживайтесь wit удар. – Bill

+0

FYI, команда Joda-Time больше не рекомендует «полуночные» классы и методы. Вместо этого они добавили метод ['withTimeAtStartOfDay'] (http://www.joda.org/joda-time/apidocs/org/joda/time/DateTime.html#withTimeAtStartOfDay()) в класс DateTime. –

0

Вы должны попробовать этот код.

LocalDate issueDate = new LocalDate(new Date()); 
System.out.println(new java.sql.Date(issueDate.toDate().getTime())) 
Смежные вопросы