Je voudrais formater un Period
en utilisant un modèle comme YY years, MM months, DD days
. Les utilitaires de Java 8 sont conçus pour formater l’heure, mais ni la période ni la durée. Il y a une PeriodFormatter
in Joda time. Est-ce que Java a des utilitaires similaires?
Une solution consiste simplement à utiliser String.format
:
import Java.time.Period;
Period p = Period.of(2,5,1);
String.format("%d years, %d months, %d days", p.getYears(), p.getMonths(), p.getDays());
Si vous devez vraiment utiliser les fonctionnalités de DateTimeFormatter
, vous pouvez utiliser un LocalDate
temporaire, mais c'est une sorte de bidouille qui déforme la sémantique de LocalDate
.
import Java.time.Period;
import Java.time.LocalDate;
import Java.time.format.DateTimeFormatter;
Period p = Period.of(2,5,1);
DateTimeFormatter fomatter = DateTimeFormatter.ofPattern("y 'years,' M 'months,' d 'days'");
LocalDate.of(p.getYears(), p.getMonths(), p.getDays()).format(fomatter);
Il n'est pas nécessaire d'utiliser String.format()
pour le formatage de chaîne simple. L'utilisation de la concaténation de chaînes ancienne et simple sera optimisée par JVM:
Function<Period, String> format = p -> p.getYears() + " years, " + p.getMonths() + " months, " + p.getDays() + " days";
public static final String format(Period period){
if (period == Period.ZERO) {
return "0 days";
} else {
StringBuilder buf = new StringBuilder();
if (period.getYears() != 0) {
buf.append(period.getYears()).append(" years");
if(period.getMonths()!= 0 || period.getDays() != 0) {
buf.append(", ");
}
}
if (period.getMonths() != 0) {
buf.append(period.getMonths()).append(" months");
if(period.getDays()!= 0) {
buf.append(", ");
}
}
if (period.getDays() != 0) {
buf.append(period.getDays()).append(" days");
}
return buf.toString();
}
}
la manière appropriée semble être un objet LocalDate intermédiaire puis un format d'appel
date1.format(DateTimeFormatter.ofPattern("uuuu MM LLLL ee ccc"));
OR (where appropriate)
date1.format(DateTimeFormatter.ofPattern("uuuu MM LLLL ee ccc", Locale.CHINA))
this imprime 1997 01 一月 07 周六
en chinois, 1997 01 January 01 Sun
en anglais et 1997 01 januari 07 zo
en néerlandais.
consultez https://docs.Oracle.com/javase/8/docs/api/Java/time/format/DateTimeFormatter.html sous "Patterns for Formatting and Parsing" pour le formatage souhaité.