java - examples - jodatime online
JodaTime equivalente de DateUtils.truncate() (4)
Nunca he usado JodaTime antes, pero respondiendo a esta pregunta, Cómo obtener los días de semana ordinales en un mes .
Lo probé y se me ocurrió este código feo para desactivar todos los campos del día siguiente:
DateTime startOfMonth =
input.withDayOfMonth(1)
.withHourOfDay(0) // there
.withMinuteOfHour(0) // has got to
.withSecondOfMinute(0) // be a shorter way
.withMillisOfSecond(0); // to do this
Donde el equivalente de Commons / Lang usando DateUtils sería
Date startOfMonth = DateUtils.truncate(input, Calendar.MONTH);
¿Cuál es el idioma preferido para hacer eso en JodaTime?
Echa un vistazo a DateMidnight
.
DateTime startOfMonth = new DateTime(new DateMidnight(input.withDayOfMonth(1)));
Actualización: 2013-08-16 por JodaStephen: La versión 2.3 de Joda-Time desprecia a DateMidnight
porque era una idea muy mala de una clase.
Así que use:
DateTime startOfMonth = input.withDayOfMonth(1).withTimeAtStartOfDay();
Joda Time también admite el método withFields en el tipo DateTime
. Esto también se puede utilizar para crear una sintaxis corta:
new DateTime().withDayOfMonth(1).withFields(new LocalTime(0, 0));
En el código de producción, el argumento de withFields
debe tener en cuenta a una constante.
Puede usar roundFloorCopy() para imitar 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()
Utilice el método withMillisOfDay()
para acortar la sintaxis.
DateTime startOfMonth = input.withDayOfMonth(1).withMillisOfDay(0);