2010-06-22 163 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());