Question

    

Cette question a déjà une réponse ici:

    
            
  •              Convertir la durée de JodaTime en chaîne                                      2 réponses                          
  •     
    

J'utilise la bibliothèque Joda-Time avec Java. Je ne parviens pas à transformer un objet Period en une chaîne au format "x jours, x heures, x minutes".

Ces objets Période sont d'abord créés en leur ajoutant une quantité de secondes (ils sont sérialisés en XML en secondes, puis recréés à partir d'eux). Si j’utilise simplement les méthodes getHours (), etc., tout ce que j’obtiens est zéro et le nombre total de secondes avec getSeconds.

Comment puis-je faire en sorte que Joda calcule les secondes dans les champs respectifs, tels que les jours, les heures, etc ...?

Était-ce utile?

La solution

Vous devez normaliser la période car si vous la construisez avec le nombre total de secondes, c'est la seule valeur dont elle dispose. La normaliser se décompose en nombre total de jours, minutes, secondes, etc.

Modifier par ripper234 : ajout d'un version de TL; DR : PeriodFormat. getDefault (). print (point)

Par exemple:

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()));
}

Imprimera:

24 minutes and 12 seconds
3 days and 24 minutes and 12 seconds

Ainsi, vous pouvez voir que la sortie pour la période non normalisée ignore simplement le nombre d'heures (il n'a pas converti les 72 heures en 3 jours).

Autres conseils

Vous pouvez également utiliser le formateur Par défaut, ce qui convient dans la plupart des cas:

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();

vous manquez les heures, voilà pourquoi. Ajoutez heures après jours et le problème résolu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top