将java.util.Date舍入到一天结束

时间:2016-04-21 10:46:43

标签: java date java-8 java.util.date apache-commons-dateutils

我希望将java.util.Date对象舍入到当天结束时,例如将2016-04-21T10:28:18.109Z舍入为2016-04-22T00:00:00.000Z

我看到Java Date rounding,但在一天结束时找不到比较的东西。它也与how to create a Java Date object of midnight today and midnight tomorrow?不同,因为我不想创建一个新的Date(今天或明天的午夜),但是根据任何给定的日期创建下一个午夜。

3 个答案:

答案 0 :(得分:1)

鉴于DateUtils的文档,我不确定我是否相信它。

假设您只对UTC日感兴趣,您可以利用Unix时代位于日期边界的事实:

public static Date roundUpUtcDate(Date date) {
    long millisPerDay = TimeUnit.DAYS.toMillis(1);
    long inputMillis = date.getTime();
    long daysRoundedUp = (inputMillis + (millisPerDay - 1)) / millisPerDay;
    return new Date(daysRoundedUp * millisPerDay);
}

如果可能,我强烈敦促您转移到java.time API。

答案 1 :(得分:1)

DateUtils.ceiling符合您的目的。通过Calendar.DATE获取字段值。

答案 2 :(得分:0)

传统方式

@Test
public void testDateRound() throws ParseException {
    Date date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").parse("2016-04-21T10:28:18.109Z");
    System.out.println(date);
    Calendar cl = Calendar.getInstance();
    cl.setTime(date);
    cl.set(Calendar.HOUR_OF_DAY, 23);
    cl.set(Calendar.MINUTE, 59);
    cl.set(Calendar.SECOND, 59);
    cl.set(Calendar.MILLISECOND, 999);
    System.out.println(cl.getTime());
    cl.add(Calendar.MILLISECOND, 1);
    System.out.println(cl.getTime());
}

输出

Thu Apr 21 10:28:18 GMT+03:00 2016
Thu Apr 21 23:59:59 GMT+03:00 2016
Fri Apr 22 00:00:00 GMT+03:00 2016