2014-10-18 3 views
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), но при использовании месяцев нет фиксированных значений времени, поскольку дни месяцев могут меняться, работать в течение нескольких месяцев.

+0

Я думаю, в течение 6 месяцев интервала вы хотите 2014-07-01T00: 00: 00.000Z – bowmore

+0

@bowmore спасибо, фиксированы. – Boyolame

ответ

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; 
}