2010-06-22 17 views
6

Bugünün başlangıcında (bugün 00:00:00) bir java.util.Date hesaplamam gerekiyor. Birisi java.util.Calendar alanlarını sıfırlama daha iyi bir şey biliyor mu:Bugün 00:00:00 için bir tarih nasıl hesaplanır?

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

Bu durum çok da kötü değil. –

+0

Ama ben kısırlıktan hoşlanıyorum ... – Nulldevice

+2

daha sonra 'getTodayAtMidnight()' –

cevap

7

Saat dilimleri hakkında endişelenmiyorsanız, çözümünüz tamam. Aksi takdirde JodaTime'a bakmaya değer.

JodaTime'a geçmeye karar verirseniz, durumunuzda kullanılması gereken DateMidnight sınıfını kullanabilirsiniz.

1

ben aynı durumda değilim ve ne sağladığınız ben böyle yaparız. Ben bir DateUtil.stripToMidnight(...) işlevine sahibim ...

Ancak tüm bunları yaparken TimeZones'ı düşünün, burada saat 0:00 gibi dünyanın başka bir yerinde aynı olmayacaktır.

JodaTime'da bunu yapmanın bir yolu olabilir, ancak ben bunu bilmiyorum.

0

başka ek kütüphaneler olmadan seçeneği:

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

gün her zaman 24 saat uzun değildir. (ipucu: gün ışığından yararlanma günleri) – Pac0

4

Aşağıdaki kod O saat dilimi değerleri dikkate almayacaktır 00:00:00

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

olarak zamanla şimdiki buluşmamız takvim nesnesi döndürür ve kodunuz ile hemen hemen aynı. Tek fark, tüm sıfırlamanın tek satırda 0'a yapılmasıdır.

DateTime start = dt.getStartOfDay(); 
+0

Saat yerine saat 12'ye ayarlanır – prashu132

1

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

o takvim modeli java8 itibariyle

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

java'nın ağır eleman kullanımını yapmaz gibi bu çözüm daha iyi olabilir, bu varsayarak aşağıdaki gibi yapılabilir: date4j kütüphanesi ile

İlgili konular