2010-03-15 9 views

risposta

7

non più semplice rispetto alle altre soluzioni, ma meno linee:

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

questo è davvero più breve rispetto al resto delle soluzioni proposte. :-) –

1

Secondo Groovy date documentazione, sembra che sia il modo ottimale.

Tuttavia, usando Groovy with parola chiave, è possibile comprimere un po 'le sue dichiarazioni

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

è possibile utilizzare la clearTime() function di Calendar in Groovy:

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

Sarebbe bello avere un metodo comodo che cancella la parte relativa all'ora di un java.util.Date e/o java.util.Calendar.
Esistono numerosi casi di utilizzo in cui è opportuno confrontare solo le parti del mese/giorno/anno di un calendario o una data. In sostanza, sarebbe effettuare le seguenti operazioni sul calendario:

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

Sì, sarebbe bello avere un tale metodo. Ma se si può accontentare di una breve funzione di allora ecco la mia:

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

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

Bello, grazie. –

0

Non del tutto sicuro se questo è il modo migliore, o anche corretto (non so se i problemi di fuso orario sorgeranno da questo), ma potrebbe funzionare per semplici casi di utilizzo:

Inizio di giornata

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

Fine della giornata

def today = new Date() 
def eod 

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

A partire dalla soluzione java.time 8 uso di Java:

LocalDateTime ldt = LocalDateTime.of(LocalDate.now(), LocalTime.MIN); 
ldt.toString(); 
Problemi correlati