如何截断/跨越日期间隔?

时间:2014-10-18 11:50:06

标签: java date java-8 java-time

我尝试使用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)但是在使用月份时,没有固定的时间戳值,因为月份的天数可能会改变,因此它不起作用几个月。

1 个答案:

答案 0 :(得分: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;
}