java jodatime period

java - Período de cadena



jodatime period (4)

Esta pregunta ya tiene una respuesta aquí:

Estoy usando la biblioteca Joda-Time con Java. Tengo algunas dificultades para convertir un objeto Período en una cadena con el formato "x días, x horas, x minutos".

Estos objetos de Período se crean primero añadiéndoles una cantidad de segundos (se serializan en XML como segundos y luego se vuelven a crear a partir de ellos). Si simplemente uso los métodos getHours () etc. en ellos, todo lo que obtengo es cero y la cantidad total de segundos con getSeconds.

¿Cómo puedo hacer que Joda calcule los segundos en los campos respectivos, como días, horas, etc.?


Necesita normalizar el período porque si lo construye con la cantidad total de segundos, ese es el único valor que tiene. La normalización lo dividirá en la cantidad total de días, minutos, segundos, etc.

Editar por ripper234 - Agregar una versión de TL; DR : PeriodFormat.getDefault().print(period)

Por ejemplo:

public static void main(String[] args) { PeriodFormatter daysHoursMinutes = new PeriodFormatterBuilder() .appendDays() .appendSuffix(" day", " days") .appendSeparator(" and ") .appendMinutes() .appendSuffix(" minute", " minutes") .appendSeparator(" and ") .appendSeconds() .appendSuffix(" second", " seconds") .toFormatter(); Period period = new Period(72, 24, 12, 0); System.out.println(daysHoursMinutes.print(period)); System.out.println(daysHoursMinutes.print(period.normalizedStandard())); }

Se imprimirá:

24 minutes and 12 seconds

3 days and 24 minutes and 12 seconds

Por lo tanto, puede ver que el resultado para el período no normalizado simplemente ignora el número de horas (no se convirtieron las 72 horas en 3 días).


También puede usar el formateador predeterminado, que es bueno para la mayoría de los casos:

Period period = new Period(startDate, endDate); System.out.println(PeriodFormat.getDefault().print(period))


Period period = new Period(); // prints 00:00:00 System.out.println(String.format("%02d:%02d:%02d", period.getHours(), period.getMinutes(), period.getSeconds())); period = period.plusSeconds(60 * 60 * 12); // prints 00:00:43200 System.out.println(String.format("%02d:%02d:%02d", period.getHours(), period.getMinutes(), period.getSeconds())); period = period.normalizedStandard(); // prints 12:00:00 System.out.println(String.format("%02d:%02d:%02d", period.getHours(), period.getMinutes(), period.getSeconds()));


PeriodFormatter daysHoursMinutes = new PeriodFormatterBuilder() .appendDays() **.appendSuffix(" day", " days") .appendSeparator(" and ") .appendMinutes() .appendSuffix(" minute", " minutes")** .appendSeparator(" and ") .appendSeconds() .appendSuffix(" second", " seconds") .toFormatter();

te estás perdiendo las horas, es por eso. Agregar horas después de días y problema resuelto.