web-dev-qa-db-fra.com

Période à chaîne

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

Ces objets Period sont d'abord créés en leur ajoutant un nombre 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 la quantité totale de secondes avec getSeconds.

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

56
tt

Vous devez normaliser la période, car si vous la construisez avec le nombre total de secondes, c'est la seule valeur qu'elle a. Le normaliser le décomposera en nombre total de jours, minutes, secondes, etc.

Modifier par ripper234 - Ajout d'un TL; version DR : PeriodFormat.getDefault().print(period)

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

Imprime:

24 minutes et 12 secondes
3 jours et 24 minutes et 12 secondes

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

91
SteveD

Vous pouvez également utiliser le formateur par défaut, qui convient à la plupart des cas:

Period period = new Period(startDate, endDate);
System.out.println(PeriodFormat.getDefault().print(period))
22
simao
    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()));
12
Jherico
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, c'est pourquoi. Ajouter des heures après des jours et le problème est résolu.

2
marucf