2010-06-22 8 views
6

Potrzebuję obliczyć java.util.Date na początek dnia dzisiejszego (00:00:00 rano w dniu dzisiejszym). Czy ktoś wie coś lepszego niż resetowania pola java.util.Calendar:Jak obliczyć datę dla godziny 00:00:00 dzisiaj?

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

To nie jest tak źle. –

+0

Ale podoba mi się zwięzłość ... – Nulldevice

+2

, a następnie zapakuj ją w metodę o nazwie 'getTodayAtMidnight()' –

Odpowiedz

7

Jeśli nie przejmujesz się strefami czasowymi, Twoje rozwiązanie jest w porządku. W przeciwnym razie warto spojrzeć na JodaTime.

Jeśli ostatecznie zdecydujesz się przejść na JodaTime, możesz użyć klasy DateMidnight, która ma być używana w twojej sytuacji.

1

jestem w tej samej łodzi, a co podałeś to jak to zrobić. Mam go w funkcji DateUtil.stripToMidnight(...) ...

Ale pamiętaj, aby rozważyć Strefy czasowe, kiedy to wszystko, ponieważ 0:00 tutaj, nie będzie taki sam w innej części świata.

Może być jakiś sposób na zrobienie tego w JodaTime, ale nie wiem.

0

Inną opcją bez dodatkowych bibliotek:

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

dni nie zawsze są długie 24h. (wskazówka: dni letnie) – Pac0

4

Poniższy kod powróci kalendarza obiekt bieżąca data jest jak z czasem 00:00:00

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

To nie weźmie pod uwagę wartości strefę czasową jest prawie taki sam jak twój kod. Jedyna różnica polega na tym, że wszystkie resetowane są do 0 w pojedynczej linii.

+0

Ustawia godzinę na 12 zamiast 0 – prashu132

1

Z date4j Biblioteka:

DateTime start = dt.getStartOfDay(); 
2

To rozwiązanie może być lepsze, ponieważ nie wykorzystują ciężkiego elementu Java kalandrowe

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

Od java8, można to zrobić, jak postępować przy założeniu, nie interesuje Cię strefa czasowa

LocalDateTime localDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT); 
Date midnight = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); 
Powiązane problemy