J'ai créé une méthode qui prend deux dates (en millisecondes) et renvoie une phrase qui indique la durée entre ces deux dates.Définition correcte d'une durée à l'aide de JodaTime
Pour le moment, j'ai ce code:
public static String formatDuration(long start, long end) {
Interval interval = new Interval(start, end);
return getPeriodFormatter().print(interval.toPeriod()).trim();
}
private static PeriodFormatter getPeriodFormatter() {
PeriodFormatter pf = new PeriodFormatterBuilder().printZeroRarelyFirst()
.appendYears().appendSuffix("y ", "y ")
.appendMonths().appendSuffix("m" , "m ")
.appendDays().appendSuffix("d ", "d ")
.appendHours().appendSuffix("h ", "h ")
.appendMinutes().appendSuffix("m ", "m ")
.appendSeconds().appendSuffix("s ", "s ")
.toFormatter();
return pf;
}
Cependant, je pense que je comprends mal la façon dont je dois définir un intervalle JodaTime. Si je tente le code de test suivant:
@Test
public void foobar() {
try {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss dd/MM/yyyy");
long start = sdf.parse("10:30:00 24/06/2009").getTime();
long end = sdf.parse("23:05:17 22/08/2009").getTime();
System.out.println("Duration: " + formatDuration(start, end));
} catch (Exception e) {
e.printStackTrace();
fail("Could not test duration.");
}
}
je reçois la sortie suivante, ce qui est faux (en particulier de la part de jour):
Duration: 1m 1d 12h 35m 17s
Comment définir la durée correcte JodaTime?
Ok, en fait, ce que j'ai oublié dans mon PeriodFormatter
est d'ajouter les semaines. Donc, si je rajoute les semaines, je reçois la sortie suivante, ce qui est correct:
Duration: 1m 4w 1d 12h 35m 17s
Ma question change un peu: Y at-il un moyen d'afficher le nombre de jours au mois, au lieu des semaines + jours? En d'autres termes, d'autres au lieu d'avoir:
Duration: 1m 4w 1d 12h 35m 17s
Je veux avoir:
Duration: 1m 29d 12h 35m 17s
En passant, je vous recommande également d'utiliser le Joda DateTimeFormat et les classes connexes plutôt que les formateurs JDK. –