我有以下代码尝试从epoch开始以秒为单位获取当前日期,通过删除任何指定日期00:00:00之后的任何秒数:
public void method(Date date) {
...
long dayDate = date.getTime() - (date.getTime() % 86400L);
...
}
出于某种原因,dayDate只是被设置为date.getTime(),而数学运算符在这里什么也没做。
我将如何解决这个问题?
答案 0 :(得分:2)
我建议您使用Joda Time库。它具有您需要的大部分与日期,时间和日历相关的功能。
答案 1 :(得分:1)
就像Ignacio已经指出的那样,date.getTime()
返回自1970年1月1日以来毫秒的数量,所以你的行应该是:
long dayDate = date.getTime() - (date.getTime() % 86400000L);
如果您计划使用Date
创建新的dayDate
,请确保其具有正确的时区,例如它应该在UTC / GMT时区。否则,可能会发生这样的奇怪事情:
Date epoch = new Date(0);
System.err.println(epoch);
在我的机器上Thu Jan 01 01:00:00 CET 1970
,因为我的日期默认是在CET(+1)时区创建的。因此,如果您要使用您的代码,并且您将使用您计算的长度创建一个新的Date
实例,那么最终的日期不会是当天的0:00,而是在1:00。
但是,如果没有立即使用Joda Time(可能不是您项目中的选项),您可以使用日历来获取秒数:
// Create the calendar and set the date.
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
// Set the hours, minutes, etc. to 0.
calendar.set(Calendar.HOUR, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(Calendar.AM_PM, Calendar.AM);
long dayDate = calendar.getTime();