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

Java 如何计算今天上午00:00:00的日期?,java,calendar,Java,Calendar,我需要计算一个java.util.Date作为今天的开始(今天的00:00:00)。是否有人比重置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(Calen

我需要计算一个java.util.Date作为今天的开始(今天的00:00:00)。是否有人比重置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);

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

但是记住,在做这一切的时候要考虑时区,因为这里的0:00在世界的另一个地方是不一样的。
在JodaTime中可能有一种方法可以做到这一点,但我不知道。

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


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

无需附加库的另一个选项:

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

以下代码将返回当前日期的日历对象,时间为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

使用库:

DateTime start = dt.getStartOfDay();

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

在java8中,假设您不关心时区,那么可以按如下方式进行

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

然后用一个名为
getTodayAtMidnight()
的方法将其包装起来。注意:不是每一天都从午夜开始;有些是凌晨1点开始的。@KevinBourrillion如果可能的话,你能详细说明一下来源吗?你说的是哪一天?它将小时设置为12而不是0天并不总是24小时长。(提示:夏令时)