Visualización de períodos de tiempo "negativos" con Joda-Time PeriodFormatter


Estoy usando joda-time (1.6.2) en un proyecto y una de las cosas que estoy haciendo es obtener la diferencia entre un tiempo predicho y un tiempo real. A veces esta diferencia es positiva, a veces negativa. Si bien el enfoque apropiado puede ser usar un en Durationlugar de un a Period, usar a PeriodFormatterpara mostrar el resultado me llevó a una pregunta sobre la clase PeriodFormatterBuilder. Como ejemplo:

DateTime d1 = new DateTime(2011, 6, 17, 13, 13, 5, 0) ;
DateTime d2 = new DateTime(2011, 6, 17, 10, 17, 3, 0) ;

Period negativePeriod = new Period(d1, d2);
Period positivePeriod = new Period(d2, d1);

PeriodFormatter pf = new PeriodFormatterBuilder()
    .minimumPrintedDigits(2)
    .appendHours()
    .appendSuffix(":")
    .rejectSignedValues(true) // Does this do anything?
    .appendMinutes()
    .appendSuffix(":")
    .appendSeconds()
    .toFormatter();

System.out.printf("Negative Period: %s\n", pf.print(negativePeriod));
System.out.printf("Positive Period: %s\n", pf.print(positivePeriod));

El resultado de esto es:

Negative Period: -02:-56:-02
Positive Period: 02:56:02

Entiendo que Periodalmacena cada componente de su fecha y hora por separado, pero para mí, el comportamiento esperado del .rejectSignedValues(true)método para construir un Formattersería mostrar solo el -signo solo para el primer elemento como:

Negative Period: -02:56:02

¿Estoy malinterpretando la API o es un error? JodaStephen? ¿Nadie?

El trabajo para mostrar lo que quiero no es difícil, pero solo tengo curiosidad sobre el enfoque Builder.

Gracias,
Manuel.

Respuesta 1

El Javadoc para rejectSignedValuesdice Reject signed values when parsing the next and following appended fields, es decir. solo afecta el análisis, no la impresión.

Su propuesta puede ser una mejora útil, pero no hay garantía de que todos los componentes sean positivos o negativos. Este también es un período válido: P-6D8H(una mezcla de positivo y negativo).

Respuesta: 2

Estoy tratando de manejar clickjacking para una aplicación web java. Obtuve una solución de Clickjacking Defense Cheat Sheet. He agregado un filtro en web.xml <? Xml version = "1.0" encoding = "UTF-8"?> & ...

Quiero getText () usando By.id o By.cssSelector. Logré resolver mi problema haciendo getAttribute ("valor"), pero no entiendo por qué getText () no funciona como lo esperaba, y podría necesitar ...

Tengo datos de BehaviorSubject que contienen datos reales (o tal vez nada, si no se le ha emitido nada). Quiero suscribirme solo para un elemento que emite, es decir, el valor observado actual o ...

Private String isChecked (ID de cadena) {id = "R.id." + id; int ID = getResources (). getIdentifier (id, "id", "com.example.android.justjava"); CheckBox checkBox = (CheckBox) findViewById (ID); ...