相当于DateUtils.truncate()的JodaTime

我以前从未使用过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 

使用DateUtils的Commons / Lang等价物将在哪里

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

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

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

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

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

看看DateMidnight

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

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

所以使用:

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

Joda Time还支持DateTimetypes中的withFields方法。 这也可以用来创build一个简短的语法:

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

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