Java DateUtils.ceiling和DateUtils.truncate之间的区别

cmc*_*nty 9 java datetime

在java文档中不清楚DateUtils.ceilingDateUtils.truncate之间的区别是什么.java doc是错的吗?有人可以澄清一下吗?

天花板

public static Date ceiling(日期,int字段)

Ceil这个日期,将该字段指定为最重要的字段.

例如,如果您的日期时间为2002年3月28日13:45:01.231,如果您通过了HOUR,它将于2002年3月28日13:00 00:00返回.如果这是通过MONTH,它将返回2002年3月1日0:00:00.000.

VS

截短

public static Date truncate(Date date,int field)

截断此日期,将字段指定为最重要的字段.

例如,如果您的日期时间为2002年3月28日13:45:01.231,如果您通过了HOUR,它将于2002年3月28日13:00 00:00返回.如果这是通过MONTH,它将返回2002年3月1日0:00:00.000.

Cha*_*lie 8

为了补充Jim的答案,我怀疑天花板方法有一个Javadoc错误.天花板的描述(日期,INT)与被更新3.0的javadoc(比较到2.5的javadoc为同样的方法)......虽然别人没有更新,该方法使用通用代码来日历版本...或者使用一个简单的测试用例,您可以看到它们的行为相同(至少对我来说是3.1 :)

@Test
public void testCeil() {
    final Calendar date = new GregorianCalendar();
    date.clear();
    date.set(2002, 3, 28, 13, 45, 01);

    System.out.println(date.getTime());
    System.out.println(DateUtils.ceiling(date, Calendar.HOUR).getTime());
    System.out.println(DateUtils.ceiling(date.getTime(), Calendar.HOUR));
    System.out.println(DateUtils.truncate(date, Calendar.HOUR).getTime());
    System.out.println(DateUtils.truncate(date.getTime(), Calendar.HOUR));
    System.out.println(date.getTime());
}
Run Code Online (Sandbox Code Playgroud)


Jim*_*ows 5

答案在文档中:

该截形,天花板和全面的方法可以被认为是Math.floor(),Math.ceil()或Math.round版本日期这样日期字段将在自下而上的顺序被忽略.

我将其解释为"你是对的,但有一个原因"