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 ...?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top