相当于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还支持DateTime
types中的withFields方法。 这也可以用来创build一个简短的语法:
new DateTime().withDayOfMonth(1).withFields(new LocalTime(0, 0));
在生产代码中,与withFields
的参数应该被分解为一个常量。