Je n'ai jamais utilisé JodaTime auparavant, mais en répondant à cette question, Comment obtenir des jours de semaine ordinaux en un mois .
Je l'ai essayé et j'ai trouvé ce code moche pour débloquer tous les champs ci-dessous le jour:
DateTime startOfMonth =
input.withDayOfMonth(1)
.withHourOfDay(0) // there
.withMinuteOfHour(0) // has got to
.withSecondOfMinute(0) // be a shorter way
.withMillisOfSecond(0); // to do this
Où l'équivalent Commons/Lang utilisant DateUtils serait
Date startOfMonth = DateUtils.truncate(input, Calendar.MONTH);
Quel est l'idiome préféré pour faire cela dans JodaTime?
Vous pouvez utiliser roundFloorCopy () pour imiter 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()
tilisez la méthode withMillisOfDay()
pour raccourcir la syntaxe.
DateTime startOfMonth = input.withDayOfMonth (1) .withMillisOfDay (0);
Jetez un œil à DateMidnight
.
DateTime startOfMonth = new DateTime(new DateMidnight(input.withDayOfMonth(1)));
Mise à jour: 16/08/2013 par JodaStephen: La version 2.3 de Joda-Time déprécie DateMidnight
car c'était une très mauvaise idée d'une classe.
Alors utilisez:
DateTime startOfMonth = input.withDayOfMonth(1).withTimeAtStartOfDay();
Joda Time prend également en charge la méthode withFields dans le type DateTime
. Cela peut également être utilisé pour créer une syntaxe courte:
new DateTime().withDayOfMonth(1).withFields(new LocalTime(0, 0));
Dans le code de production, l'argument de withFields
doit être factorisé en une constante.