2010-06-22 160 views
6

我需要計算java.util.Date了今天一天(上午12點00分00秒一今天一天)的開始。是否有人知道的東西比復位java.util.Calendar中的領域更好地:如何計算今天上午00:00:00的日期?

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

這並不算太壞。 – 2010-06-22 11:06:13

+0

但我喜歡簡潔... – Nulldevice 2010-06-22 11:20:38

+2

然後把它包在一個名爲方法'getTodayAtMidnight()' – 2010-06-22 11:43:41

回答

7

如果你不操心時區,然後你的解決方案是確定的。否則,值得看看JodaTime。

如果你最終決定切換到JodaTime,那麼你可以使用DateMidnight類應該在你的情況下使用。

1

我在同一條船上來的,並已提供的是我如何做到這一點。我確實有DateUtil.stripToMidnight(...)函數...

但是,只要記住在做這一切時考慮時區,因爲這裏的凌晨0點在世界的另一個地方不會是相同的。

有可能是一種方式,JodaTime做到這一點,但我不知道它。

0

,無需額外的庫的另一種選擇:

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

天不總是24小時。 (提示:夏令時) – Pac0 2017-11-16 15:34:28

4

下面的代碼會隨時間返回當前日期的日曆對象爲00:00:00

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

它不會考慮時區和值與您的代碼幾乎相同。唯一的區別是它在單行中全部重置爲0。

+0

它將小時設置爲12而不是0 – prashu132 2013-06-27 03:47:21

1

隨着date4j庫:

DateTime start = dt.getStartOfDay(); 
2

該解決方案可以更好,因爲它並沒有使用Java的重元素的日曆

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

由於java8的,這是可以做到如下假設你不在乎時區

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