2012-01-13 15 views
13
sql

oráculo:java.sql.Date en cuando joda conversión

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); 

salida:

2012-01-01

2012-01- 01T : 00: 00.000 + 07: 00

2012-01-01T : 00: 00.000 + 07: 00

donde hizo la hora extra?

+1

Creo que este problema de zona horaria, consulte con la zona horaria correcta? – Kushan

Respuesta

14

Utilice LocalDate.fromDateFields(date) para interpretar la fecha SQL como local (ignorando la zona horaria). A continuación, puede utilizar los métodos de LocalDate para obtener una DateTime si es necesario (aunque si el objeto es en realidad "sólo una fecha", entonces LocalDate es el objeto derecho de uso.

+0

Solo una nota: estaba lidiando con 'java.sql.Timestamp' y no con' java.sql.Date', así que usar 'new DateTime (java.sql.Timestamp.valueOf (someSqlDate))' hizo el truco. –

0

El constructor predeterminado utiliza el constructor predeterminado del sistema, y ​​eso puede estar causando problemas con respecto a DST. Encontré la función toDateMidnight realmente útil cuando trato de asegurarme de estar en realidad a medianoche.

+0

¿Qué pasa si el tiempo no aumenta y resta? – turbanoff

+0

¿Puede ser más específico? No estoy seguro de a qué se refiere. 'toDateMidngith' devuelve un' LocalDate' objeto, y solo puede representar fechas, no veces. ¿Es ese el problema? Si es así, puede que no sea lo que estás buscando. Si 'con MillisOfDay()' funciona para ti, entonces sé ingenioso golpear. – Bill

+0

Para su información, el equipo de Joda-Time ya no recomienda las clases y métodos relacionados con "la medianoche". Agregaron el método ['withTimeAtStartOfDay'] (http://www.joda.org/joda-time/apidocs/org/joda/time/DateTime.html#withTimeAtStartOfDay()) a la clase DateTime en su lugar. –

0

Debe tratar este código.

LocalDate issueDate = new LocalDate(new Date()); 
System.out.println(new java.sql.Date(issueDate.toDate().getTime())) 
Cuestiones relacionadas