2010-03-15 11 views

Respuesta

7

No es más simple que las otras soluciones, pero menos líneas:

def now = new GregorianCalendar() 
def today = new GregorianCalendar(now.get(Calendar.YEAR), now.get(Calendar.MONTH), now.get(Calendar.DAY_OF_MONTH)) 
println today.getTime() 
+0

Este es de hecho más corto que el resto de las soluciones propuestas. :-) –

1

De acuerdo con la documentación Groovy date, parece que es la forma óptima.

Sin embargo, el uso de Groovy with palabra clave, puede comprimir un poco de sus estados de

def today = Calendar.instance 
with(today) { 
    set Calendar.HOUR_OF_DAY, 0 
    set Calendar.MINUTE, 0 
    set Calendar.SECOND, 0 
} 
println today // Mon Mar 15 00:00:00 SGT 2010 
5

podría utilizar el clearTime() function de Calendar en Groovy:

def calendar = Calendar.instance 
calendar.with { 
    clearTime() 
    println time 
} 

que sería bueno para tiene un método de conveniencia que borra la porción de tiempo de java.util.Date y/o java.util.Calendar.
Existen numerosos casos de uso en los que tiene sentido comparar mes/día/año solo partes de un calendario o fecha. En esencia, se llevaría a cabo lo siguiente en Calendario:

void clearTime() { 
    clear(Calendar.HOUR_OF_DAY) 
    clear(Calendar.HOUR) 
    clear(Calendar.MINUTE) 
    clear(Calendar.SECOND) 
    clear(Calendar.MILLISECOND) 
} 
2

Sí, sería bueno tener a tener tal una método. Pero si usted puede conformarse con una función corta entonces aquí está la mía:

def startOfDay(t) { 
    tz = TimeZone.getDefault(); 
    t +=tz.getOffset(t); 
    t -= (t % 86400000); 
    t-tz.getOffset(t); 
} 

print new Date(startOfDay(System.currentTimeMillis())); 
+0

Bien, gracias. –

0

No estoy seguro de si se trata de la mejor manera, o de hecho correcta (no estoy seguro si los problemas de zona horaria surgirán de esto), pero podría funcionar para casos de uso sencillo:

inicio del día

def today = new Date() 
def start = today.clearTime() 

final del día

def today = new Date() 
def eod 

use (TimeCategory) { 
    eod = today.clearTime() + 1.day - 1.millisecond 
} 
0

A partir de Java solución java.time 8 uso:

LocalDateTime ldt = LocalDateTime.of(LocalDate.now(), LocalTime.MIN); 
ldt.toString(); 
Cuestiones relacionadas