3

我尝试使用 Instant.truncatedTo 截断日期,但似乎不允许截断超过一天的时间。我想要做的是使用特定的时间间隔截断日期。例如:

For 1hour interval, 2014-10-18T11:30:52.560Z should become: 2014-10-18T11:00:00.000Z 
For 1day interval, 2014-10-18T11:30:52.560Z should become: 2014-10-18T00:00:00.000Z 
For 1month interval, 2014-10-18T11:30:52.560Z should become: 2014-10-01T00:00:00.000Z 
For 6month interval, 2014-10-18T11:30:52.560Z should become: 2014-07-01T00:00:00.000Z

因此,它更像是将日期跨越到特定的时间间隔。

我实际上是在使用时间戳值来将它们除以时间戳间隔((dateTimestamp/intervalTimestamp)*intervalTimestamp),但是在使用月份时,没有固定的时间戳值,因为月份的天数可能会改变,因此它几个月都不起作用。

4

1 回答 1

1

您可以编写自己的函数:

public LocalDateTime truncateTo(LocalDateTime dt, Time interval) {
    switch(interval) {
    case MONTH_6:
        if(dt.getMonthValue() > 6)
            dt = dt.withMonth(7);
        else
            dt = dt.withMonth(1);
    case MONTH:
        dt = dt.withDayOfMonth(1);
    case DAY:
        dt = dt.withHour(0);
    case HOUR: 
        dt = dt.withMinute(0);
        dt = dt.withSecond(0);
        dt = dt.withNano(0);
    break;
    }
    return dt;
}
于 2014-10-21T13:35:01.363 回答