我之前从未使用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 / Lang的DateUtils等效项
Date startOfMonth = DateUtils.truncate(input, Calendar.MONTH);
在JodaTime中,首选的成语是什么?
答案 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
的参数应该被分解为常量。