Java 如何计算今天上午00:00:00的日期?
我需要计算一个java.util.Date作为今天的开始(今天的00:00:00)。是否有人比重置java.util.Calendar的字段更了解: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
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小时长。(提示:夏令时)