如何计算今天00:00:00的日期?

时间:2010-06-22 10:57:55

标签: java calendar

我需要为今天的开始(今天00:00:00)计算java.util.Date。有人知道比重置java.util.Calendar的字段更好的事情:

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);

7 个答案:

答案 0 :(得分:7)

如果您不打扰时区,那么您的解决方案就可以了。否则值得一看JodaTime。

如果您最终决定切换到JodaTime,那么您可以使用应该在您的情况下使用的DateMidnight类。

答案 1 :(得分: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。

答案 2 :(得分:2)

这个解决方案可以更好,因为它没有使用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));
    }
}

答案 3 :(得分:1)

我在同一条船上,你提供的是我是如何做到的。我确实在DateUtil.stripToMidnight(...)函数中有它...

但是记得在做这一切时考虑TimeZones,就像凌晨0点在这里一样,在世界的另一个地方也不一样。

在JodaTime中可能有办法做到这一点,但我不知道。

答案 4 :(得分:1)

使用date4j库:

DateTime start = dt.getStartOfDay();

答案 5 :(得分: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());
    }
}

答案 6 :(得分:0)

从java8开始,假设您不关心时区,可以按照以下步骤进行操作

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