En mi base de datos las fechas son como 2012-04-09 04:02:53
2012-04-09 04:04:51
2012-04-08 04:04:51
, etc., necesito recuperar los datos que tienen fecha actual en el campo de fecha. Quiero decir que necesito hacer coincidir solo 2012-04-09'
. ¿Cómo puedo hacerlo usando los criterios de hibernación?Cómo comparar las fechas en hibernación
Respuesta
Uso Restrictions.between() para generar una cláusula where que la columna de la fecha es entre '2012-04-09 00:00:00' y '2012-04-09 23:59:59'
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date fromDate = df.parse("2012-04-09 00:00:00");
Date toDate = df.parse("2012-04-09 23:59:59");
criteria.add(Restrictions.between("dateField", fromDate, toDate));
Tenga en cuenta que todas las propiedades que se utilizan en la API Criteria es el nombre de la propiedad de Java, pero no el nombre real de la columna.
Actualización: Obtener fromDate y estrictas disponibles para la fecha actual utilizando sólo de JDK
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date fromDate = calendar.getTime();
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
Date toDate = calendar.getTime();
criteria.add(Restrictions.between("dateField", fromDate, toDate));
La forma más fácil es ir a buscar todos los registros que tienen fecha, entre el comienzo y el final de un día determinado:
WHERE date BETWEEN :from AND :to
y calcular from
y to
en su código Java.
Para medianoches Computing:
import static org.apache.commons.lang.time.DateUtils.ceiling;
import static org.apache.commons.lang.time.DateUtils.truncate;
Date someDay = new Date();
Date from = truncate(someDay, Calendar.DAY_OF_MONTH);
Date to = new Date(ceiling(someDay, Calendar.DAY_OF_MONTH).getTime() - 1);
Restrictions.between("dateColumn", midnight1, midnight2)
Cómo-hacerlo en hibernación ya se ha dicho. Usted puede preparar los Timestamp
objetos en el código Java utilizando, por ejemplo, la siguiente aproach:
Calendar cFrom = Calendar.getInstance();
cFrom.setTime(new Date()); /* today */
cFrom.set(Calendar.HOUR_OF_DAY, 0);
cFrom.set(Calendar.MINUTE, 0);
cFrom.set(Calendar.SECOND, 0);
cFrom.set(Calendar.MILLISECOND, 0);
Timestamp from = new Timestamp(cFrom.getTime().getTime());
Calendar cTo = Calendar.getInstance();
cTo.setTime(new Date()); /* today */
cTo.set(Calendar.HOUR_OF_DAY, 23);
cTo.set(Calendar.MINUTE, 59);
cTo.set(Calendar.SECOND, 59);
cTo.set(Calendar.MILLISECOND, 999);
Timestamp to = new Timestamp(cTo.getTime().getTime());
final String QUERY = ""
+ "SELECT tr "
+ "FROM Type tr "
+ "WHERE tr.timestamp >= :timestampFrom AND tr.timestamp <= :timestampTo";
Query query = entityManager.createQuery(QUERY);
query.setParameter("timestampFrom", from);
query.setParameter("timestampTo", to);
@SuppressWarnings("unchecked")
List<Type> ts = (List<Type>)query.getResultList();
de la manera convencional – Akhilesh
gusta esta?
criteria.add(Expression.eq("yourDate", aDate))
The following code will work
Calendar fromDate = Calendar.getInstance();
fromDate.setTime(new Date());
fromDate.set(Calendar.HOUR_OF_DAY, 0);
fromDate.set(Calendar.MINUTE, 0);
fromDate.set(Calendar.SECOND, 0);
fromDate.set(Calendar.MILLISECOND, 0);
Calendar toDate = Calendar.getInstance();
toDate.setTime(new Date());
toDate.set(Calendar.HOUR_OF_DAY, 23);
toDate.set(Calendar.MINUTE, 59);
toDate.set(Calendar.SECOND, 59);
toDate.set(Calendar.MILLISECOND, 999);
criteria.add(Restrictions.between("loadDate", fromDate.getTime(),
toDate.getTime()));
fromDate.setTime(new Date());
fromDate.set(Calendar.HOUR_OF_DAY, 0);
fromDate.set(Calendar.MINUTE, 0);
fromDate.set(Calendar.SECOND, 0);
fromDate.set(Calendar.MILLISECOND, 0);
Este código es extremadamente peligroso ... si el día es interruptor para el horario de verano (por ejemplo, 04/06/1980), se llega a excepción siguiente !!!
java.lang.IllegalArgumentException: HOUR_OF_DAY: 0 -> 1day
HQL: from human pat where year(pat.birthdate) = :start_day and month(pat.birthdate) = :start_month and year(pat.birthdate) = :start_year ");
params.put("start_day", startDate.get(Calendar.DAY_OF_MONTH));
params.put("start_month", startDate.get(Calendar.MONTH) + 1);
params.put("start_year", startDate.get(Calendar.YEAR));
El/mes/día las funciones utilizan las funciones de base de datos subyacentes años (extracto, ...) y compara estos valores únicos. Por lo tanto, no necesité establecer el tiempo en 0, lo que conduce a la excepción descrita anteriormente. ¡tan solo un ejemplo de mi mente sobre cómo resolví el problema! Tal vez ayuda
- 1. ¿Comparar las fechas en DataView.RowFilter?
- 2. ¿Cómo comparar las fechas en LINQ?
- 3. Cómo comparar las fechas en C#
- 4. Comparar las fechas con Parse.com
- 5. Doctrina 1,2 cómo comparar las fechas
- 6. ¿Cómo comparar fechas en Java?
- 7. Cómo comparar dos fechas
- 8. Cómo comparar fechas en Django
- 9. Comparar fechas en MySQL
- 10. Comparar dos fechas en Java
- 11. Comparar dos fechas en JS
- 12. ¿Se pueden comparar las fechas almacenadas como cadena/texto directamente?
- 13. Cómo comparar fechas en xpath para seleccionar nodos
- 14. ¿Cómo puedo comparar dos fechas en vbscript/ASP?
- 15. MVC validación personalizada: comparar dos fechas
- 16. ¿Cómo se pueden comparar dos fechas (solo fechas, no tiempo) en cacao?
- 17. Eliminar las fechas contenidas en otras fechas?
- 18. Comparar dos fechas Google apps script
- 19. ¿Debo usar Calendar.compareTo() para comparar fechas?
- 20. ¿Cómo puedo comparar dos fechas, devolver un número de días
- 21. ¿Hay alguna manera de comparar fechas "cadenas" en C# sin convertir las cadenas?
- 22. ¿Cuál es la mejor manera de comparar las fechas en Perl?
- 23. ¿Cómo comparar las banderas en C#?
- 24. ¿Cómo se comparan las fechas en Perl?
- 25. ¿Cómo puedo ordenar las fechas en Perl?
- 26. ¿Cómo se analizan las fechas en GWT?
- 27. ¿Cómo puedo validar las fechas en Perl?
- 28. ¿Cómo formato las fechas en Perl?
- 29. Cómo realizar operaciones de fecha en hibernación
- 30. Comparar fechas en T-SQL, ignorando la parte de tiempo
Cómo llegar desde fecha y hora a partir de la fecha actual – Romi
@ romi: vea mis actualizaciones –
@Ken Chan Gracias amigo por publicar la fecha de comparación de la fecha única. Te daré +1 por '23: 59: 59' en el método de análisis. – OO7