From 731cea462c9634a3621f3cafe36abc79991951ff Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Thu, 8 Jun 2023 07:12:17 +0200 Subject: [PATCH] [New] Allow to create PxW durations --- .../li/strolch/utils/time/PeriodDuration.java | 22 +++++++++++++++++++ .../utils/time/PeriodDurationFormatter.java | 5 ++++- .../main/resources/strolch-utils.properties | 1 + .../resources/strolch-utils_de.properties | 1 + 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/utils/src/main/java/li/strolch/utils/time/PeriodDuration.java b/utils/src/main/java/li/strolch/utils/time/PeriodDuration.java index 2e4503272..79be0d6f4 100644 --- a/utils/src/main/java/li/strolch/utils/time/PeriodDuration.java +++ b/utils/src/main/java/li/strolch/utils/time/PeriodDuration.java @@ -464,6 +464,25 @@ public final class PeriodDuration implements TemporalAmount, Serializable, Compa return period.isZero() && duration.isZero(); } + /** + * Checks if all parts of this amount are zero except days, which must be a multiple of 7 + * + * @return true if only the days are set, and are a multiple of 7 + */ + public boolean isWeeks() { + return duration.isZero() && period.getYears() == 0 && period.getMonths() == 0 && period.getDays() % 7 == 0; + } + + /** + * Returns the number of weeks defined by the days which are a multiple of 7, i.e. if the days value is 14, then it + * returns 2 for the weeks. + * + * @return the number of weeks represented by the days + */ + public int getWeeks() { + return period.getDays() / 7; + } + //----------------------------------------------------------------------- /** @@ -707,8 +726,11 @@ public final class PeriodDuration implements TemporalAmount, Serializable, Compa return duration.toString(); } if (duration.isZero()) { + if (isWeeks()) + return "P" + getWeeks() + "W"; return period.toString(); } + return period + duration.toString().substring(1); } diff --git a/utils/src/main/java/li/strolch/utils/time/PeriodDurationFormatter.java b/utils/src/main/java/li/strolch/utils/time/PeriodDurationFormatter.java index a2e5a5798..54c427e17 100644 --- a/utils/src/main/java/li/strolch/utils/time/PeriodDurationFormatter.java +++ b/utils/src/main/java/li/strolch/utils/time/PeriodDurationFormatter.java @@ -36,7 +36,10 @@ public class PeriodDurationFormatter { u = (int) periodDuration.get(ChronoUnit.DAYS); if (u > 0) { - sb.append(u).append(" ").append(i18n(locale, "days")); + if (u % 7 == 0) + sb.append(u / 7).append(" ").append(i18n(locale, "weeks")); + else + sb.append(u).append(" ").append(i18n(locale, "days")); periodDuration = periodDuration.minus(Period.ofDays(u)); if (periodDuration.isZero()) diff --git a/utils/src/main/resources/strolch-utils.properties b/utils/src/main/resources/strolch-utils.properties index cae0a05ba..bb7eb60e0 100644 --- a/utils/src/main/resources/strolch-utils.properties +++ b/utils/src/main/resources/strolch-utils.properties @@ -11,6 +11,7 @@ Fr=Fr Sa=Sa Su=Su days=Days +weeks=Weeks months=Months years=Years minutes=Minutes diff --git a/utils/src/main/resources/strolch-utils_de.properties b/utils/src/main/resources/strolch-utils_de.properties index 37cc843b3..b52511463 100644 --- a/utils/src/main/resources/strolch-utils_de.properties +++ b/utils/src/main/resources/strolch-utils_de.properties @@ -11,6 +11,7 @@ Fr=Fr Sa=Sa Su=So days=Tage +weeks=Wochen months=Monate years=Jahre minutes=Minuten