私はこれまで JodaTime を使用したことがありませんでしたが、この質問に答えるには 月の序数の平日を取得する方法 です。
私はそれを試してみて、この醜いコードを思いついて、1日以内にすべてのフィールドの設定を解除しました:
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でそれを行うための推奨イディオムは何ですか?
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
タイプの withFields メソッドもサポートしています。これは、短い構文を作成するためにも使用できます。
new DateTime().withDayOfMonth(1).withFields(new LocalTime(0, 0));
量産コードでは、withFields
の引数を定数に分解する必要があります。