如何从Epoch时间戳中删除小时,分钟和秒

时间:2013-10-01 18:11:25

标签: java date epoch milliseconds

我需要编写一个接受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();
}

此解决方案会受到我应用的客户端/服务器端之间的时区差异的影响吗?

4 个答案:

答案 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);

您可以在http://commons.apache.org/proper/commons-lang/

下载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