我需要编写一个接受java.util.Date
的函数,并从中删除小时,分钟和毫秒使用JUST MATH(没有日期格式化程序,没有日历对象等) :
private Date getJustDateFrom(Date d) {
//remove hours, minutes, and seconds, then return the date
}
此方法的目的是从毫秒值中获取日期,没有时间。
这是我到目前为止所拥有的:
private Date getJustDateFrom(Date d) {
long milliseconds = d.getTime();
return new Date(milliseconds - (milliseconds%(1000*60*60)));
}
问题是,这只会消除分钟和秒钟。我不知道如何删除时间。
如果我milliseconds - (milliseconds%(1000*60*60*23))
,那么它会回到前一天的23:00。
修改
这是另一种解决方案:
public static Date getJustDateFrom(Date d) {
Calendar c = Calendar.getInstance();
c.setTime(d);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
return c.getTime();
}
此解决方案会受到我应用的客户端/服务器端之间的时区差异的影响吗?
答案 0 :(得分:11)
一天24小时。使用毫秒%(1000 * 60 * 60 * 24)。
答案 1 :(得分:2)
根据您的定义,根本不可能。
毫秒时间戳表示从固定时间点开始经过的毫秒数(1970-01-01 00:00:00.000 UTC,如果我没记错的话)。如果没有指定要转换为的时区,则无法将此时间戳转换为日期+时间。
因此,您只能针对特定时区将时间戳舍入为整天,而不是一般。所以任何摆弄Date.getTime()而不考虑任何时区的保证只能在一个时区 - 你硬编码的那个时区。
帮自己一个忙,并使用日历。
答案 2 :(得分:1)
你可以使用apache的公共语言lang DateUtils helper实用程序类。
例如,如果你的日期时间是2002年3月28日 13:45:01.231,如果你通过Calendar.HOUR,它将在3月28日返回 2002年13:00:00.000如果这是通过Calendar.MONTH传递的,那就可以了 返回2002年3月1日0:00:00.000。
Date newDate = DateUtils.truncate(new Date(1408338000000L), Calendar.DAY_OF_MONTH);
下载commons lang jar
答案 3 :(得分:0)
import java.sql.Date;
long dateInEpoch = 1_592_283_050_000L;
ZoneId defaultZoneId = ZoneId.systemDefault();
long currentDate = Date
.from(new Date(dateInEpoch)
.toLocalDate()
.atStartOfDay(defaultZoneId)
.toInstant())
.getTime();
输入:1592283050000
输出:1592245800000