2010-06-22 11 views
6

Devo calcolare un java.util.Date per l'inizio di un giorno di oggi (00:00:00 di un giorno di oggi). Qualcuno sa qualcosa di meglio di campi di java.util.Calendar reset:Come calcolare una data per le 00:00:00 di oggi?

Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.AM_PM, Calendar.AM); 
cal.set(Calendar.HOUR, 0); 
cal.set(Calendar.MINUTE, 0); 
cal.set(Calendar.SECOND, 0); 
cal.set(Calendar.MILLISECOND, 0); 
+0

Non male. –

+0

Ma mi piace la brevità ... – Nulldevice

+2

quindi avvolgere in un metodo chiamato 'getTodayAtMidnight()' –

risposta

7

Se non ti preoccupi dei fusi orari, la soluzione è ok. Altrimenti vale la pena dare un'occhiata a JodaTime.

Se alla fine si decide di passare a JodaTime, è possibile utilizzare la classe DateMidnight che dovrebbe essere utilizzata nella propria situazione.

1

Sono nella stessa barca, e ciò che avete fornito è come lo faccio. Ce l'ho in una funzione DateUtil.stripToMidnight(...) ...

Ma ricordatevi di considerare i Fusi orari quando si fa tutto questo, poiché 0:00 am qui non sarà lo stesso in un'altra parte del mondo.

Potrebbe esserci un modo per farlo in JodaTime, ma non ne sono a conoscenza.

0

Un'altra opzione senza librerie aggiuntive:

import java.sql.Date; 

public class DateTest { 
    public static void main(String[] args) { 
     long MS_PER_DAY = 24L * 60 * 60 * 1000; 
     long msWithoutTime = (System.currentTimeMillis()/MS_PER_DAY) * MS_PER_DAY; 
     Date date = new Date(msWithoutTime); 
     System.out.println(date.toGMTString()); 
    } 
} 
+0

giorni non sono sempre 24 ore. (suggerimento: giorni dell'ora legale) – Pac0

4

Il seguente codice restituirà oggetto calendario della data corrente con il tempo come 00:00:00

Calendar current = Calendar.getInstance(); 
current.set(current.get(Calendar.YEAR),current.get(Calendar.MONTH),current.get(Calendar.DATE),0,0,0); 

Non prenderà in considerazione i valori di fuso orario e è quasi uguale al tuo codice. L'unica differenza è che viene eseguito tutto ripristinato su 0 nella riga singola.

+0

Imposta l'ora su 12 anziché su 0 – prashu132

1

Con il date4j libreria:

DateTime start = dt.getStartOfDay(); 
2

Questa soluzione può essere migliore in quanto non fa uso di un elemento pesante di java Calender

public class DateTest { 
    public static void main(String[] args) { 
     SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
    long time = dateFormat.parse(dateFormat.format(new Date())).getTime(); 
    System.out.println("todays start date : " + new Date(time)); 
    } 
} 
0

A partire dal java8, si può fare come seguire assumendo non ti interessa il fuso orario

LocalDateTime localDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT); 
Date midnight = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); 
Problemi correlati