我需要为今天的开始(今天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);
答案 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());