Periodo di stringa [duplicato]
Domanda
Questa domanda ha già una risposta qui:
- Converti la durata di JodaTime in stringa 2 risposte
Sto usando la libreria Joda-Time con Java. Sto riscontrando delle difficoltà nel provare a trasformare un oggetto Period in una stringa nel formato di " x giorni, x ore, x minuti " ;.
Questi oggetti Period vengono prima creati aggiungendo una quantità di secondi (vengono serializzati in XML come secondi e quindi ricreati da essi). Se uso semplicemente i metodi getHours () ecc., Tutto quello che ottengo è zero e il totale di secondi con getSeconds.
Come posso fare in modo che Joda calcoli i secondi nei rispettivi campi, come giorni, ore, ecc ...?
Soluzione
Devi normalizzare il periodo perché se lo costruisci con il numero totale di secondi, questo è l'unico valore che ha. La normalizzazione lo suddividerà nel numero totale di giorni, minuti, secondi, ecc.
Modifica di ripper234 - Aggiunta di un TL; versione DR : PeriodFormat. getDefault (). stampa (periodo)
Ad esempio:
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()));
}
Stampa:
24 minutes and 12 seconds
3 days and 24 minutes and 12 seconds
Quindi puoi vedere l'output per il periodo non normalizzato semplicemente ignora il numero di ore (non ha convertito le 72 ore in 3 giorni).
Altri suggerimenti
Puoi anche usare il formattatore predefinito, che è buono per la maggior parte dei casi:
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();
ti stai perdendo le ore, ecco perché. Aggiungi ore dopo giorni e problema risolto.