JodaTime相当于DateUtils.truncate()

时间:2010-11-09 12:34:54

标签: java jodatime

我之前从未使用JodaTime,但回答了这个问题How to get ordinal Weekdays in a Month

我尝试了它并想出了这个丑陋的代码,以便在下面取消所有字段:

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

使用Commons / LangDateUtils等效项

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

在JodaTime中,首选的成语是什么?

4 个答案:

答案 0 :(得分:43)

您可以使用 roundFloorCopy() 来模仿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()

答案 1 :(得分:39)

使用withMillisOfDay()方法缩短语法。

DateTime startOfMonth = input.withDayOfMonth(1).withMillisOfDay(0);

答案 2 :(得分:21)

看看DateMidnight

DateTime startOfMonth = new DateTime(new DateMidnight(input.withDayOfMonth(1)));

更新:2013-08-16作者:JodaStephen:Joda-Time的2.3版弃用了DateMidnight,因为这是一个非常糟糕的类。

所以使用:

DateTime startOfMonth = input.withDayOfMonth(1).withTimeAtStartOfDay();

答案 3 :(得分:1)

Joda Time还支持DateTime类型中的withFields方法。这也可以用于创建一个简短的语法:

new DateTime().withDayOfMonth(1).withFields(new LocalTime(0, 0));

在生产代码中,withFields的参数应该被分解为常量。