JodaTime 相当于 DateUtils.truncate()

问题描述 投票:0回答:4

我以前从未使用过JodaTime,但回答这个问题,如何获取一个月内的序数工作日

我尝试了一下,并想出了这个丑陋的代码来取消设置当天以下的所有字段:

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

使用 DateUtilsCommons / Lang 等效项将是

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

在 JodaTime 中执行此操作的首选习惯是什么?

java jodatime
4个回答
46
投票

您可以使用 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()

42
投票

使用

withMillisOfDay()
方法来缩短语法。

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

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();

1
投票

Joda Time 还支持 DateTime 类型中的

withFields
方法。这也可以用于创建简短的语法:

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

在生产代码中,

withFields
的参数应分解为常量。

© www.soinside.com 2019 - 2024. All rights reserved.