Search code examples
javajodatime

JodaTime equivalent of DateUtils.truncate()


I have never used JodaTime before, but answering this question, How to get ordinal Weekdays in a Month.

I tried it and came up with this ugly code to unset all fields below day:

DateTime startOfMonth =
    input.withDayOfMonth(1)
        .withHourOfDay(0)       // there
        .withMinuteOfHour(0)    // has got to
        .withSecondOfMinute(0)  // be a shorter way
        .withMillisOfSecond(0); // to do this

Where the Commons / Lang equivalent using DateUtils would be

Date startOfMonth = DateUtils.truncate(input, Calendar.MONTH);

What's the preferred idiom to do that in JodaTime?


Solution

  • You can use roundFloorCopy() to mimic DateUtils.truncate

    Date truncateMonth = DateUtils.truncate(input, Calendar.MONTH);
    -> DateTime truncateMonth = input.dayOfMonth().roundFloorCopy();
    
    Date truncateMinute = DateUtils.truncate(input, Calendar.MINUTE);
    -> DateTime truncateMinute = input.minuteOfDay().roundFloorCopy();
    
    Date truncateHourOfDay = DateUtils.truncate(input, Calendar.HOUR_OF_DAY);
    -> DateTime truncateHourOfDay = input.hourOfDay().roundFloorCopy()