diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/util/CWADateTimeFormatPatternFactory.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/util/CWADateTimeFormatPatternFactory.kt new file mode 100644 index 0000000000000000000000000000000000000000..ae56622db3edfc2d6e6f42f623bd35029b806cab --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/util/CWADateTimeFormatPatternFactory.kt @@ -0,0 +1,18 @@ +package de.rki.coronawarnapp.contactdiary.util + +import org.joda.time.format.DateTimeFormat +import java.util.Locale + +object CWADateTimeFormatPatternFactory { + + fun Locale.shortDatePattern() = when { + this == Locale.GERMANY -> "dd.MM.yy" + this == Locale.UK -> "dd/MM/yyyy" + this == Locale.US -> "M/d/yy" + this == Locale("bg", "BG") -> "d.MM.yy 'г'." + this == Locale("ro", "RO") -> "dd.MM.yyyy" + this == Locale("pl", "PL") -> "dd.MM.yyyy" + this == Locale("tr", "TR") -> "d.MM.yyyy" + else -> DateTimeFormat.patternForStyle("S-", this) + } +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/util/ContactDiaryExtensions.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/util/ContactDiaryExtensions.kt index 6348145c6833c9a85aa064e517e8a154fb2e2f77..9429701e6c193d8a8361c72955957249e140dc84 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/util/ContactDiaryExtensions.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/util/ContactDiaryExtensions.kt @@ -9,6 +9,7 @@ import androidx.core.view.AccessibilityDelegateCompat import androidx.core.view.ViewCompat import androidx.core.view.accessibility.AccessibilityNodeInfoCompat import androidx.viewpager2.widget.ViewPager2 +import de.rki.coronawarnapp.contactdiary.util.CWADateTimeFormatPatternFactory.shortDatePattern import org.joda.time.LocalDate import org.joda.time.format.DateTimeFormat import java.util.Locale @@ -31,12 +32,7 @@ fun Context.getLocale(): Locale { } } -fun LocalDate.toFormattedDay(locale: Locale): String { - // Use two different methods to get the final date format (Weekday, Shortdate) - // because the custom pattern of toString() does not localize characters like "/" or "." - return "${toString("EEEE", locale)}, " + - DateTimeFormat.shortDate().withLocale(locale).print(this) -} +fun LocalDate.toFormattedDay(locale: Locale): String = toString("EEEE, ${locale.shortDatePattern()}", locale) fun LocalDate.toFormattedDayForAccessibility(locale: Locale): String { // Use two different methods to get the final date format (Weekday, Longdate) diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/util/CWADateTimeFormatPatternFactoryTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/util/CWADateTimeFormatPatternFactoryTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..326895d778c395a91919603b72696b986ba2fdf0 --- /dev/null +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/util/CWADateTimeFormatPatternFactoryTest.kt @@ -0,0 +1,44 @@ +package de.rki.coronawarnapp.contactdiary.util + +import de.rki.coronawarnapp.contactdiary.util.CWADateTimeFormatPatternFactory.shortDatePattern +import io.kotest.matchers.shouldBe +import org.junit.Test +import java.util.Locale + +class CWADateTimeFormatPatternFactoryTest { + + @Test + fun `pattern for german date`() { + Locale.GERMANY.shortDatePattern() shouldBe "dd.MM.yy" + } + + @Test + fun `pattern for bulgarian date`() { + Locale("bg", "BG").shortDatePattern() shouldBe "d.MM.yy 'г'." + } + + @Test + fun `pattern for gb date`() { + Locale.UK.shortDatePattern() shouldBe "dd/MM/yyyy" + } + + @Test + fun `pattern for us date`() { + Locale.US.shortDatePattern() shouldBe "M/d/yy" + } + + @Test + fun `pattern for romanian date`() { + Locale("ro", "RO").shortDatePattern() shouldBe "dd.MM.yyyy" + } + + @Test + fun `pattern for polish date`() { + Locale("pl", "PL").shortDatePattern() shouldBe "dd.MM.yyyy" + } + + @Test + fun `pattern for turkish date`() { + Locale("tr", "TR").shortDatePattern() shouldBe "d.MM.yyyy" + } +} diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/util/ContactDiaryDateFormatterExtensionTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/util/ContactDiaryDateFormatterExtensionTest.kt index 18a4cd7d5ca8dcde944edeb3c4287f7613078cf7..969ec9009d0cb0799653ba6428e2fafbc826f4a2 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/util/ContactDiaryDateFormatterExtensionTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/util/ContactDiaryDateFormatterExtensionTest.kt @@ -1,5 +1,6 @@ package de.rki.coronawarnapp.contactdiary.util +import io.kotest.matchers.collections.shouldBeIn import io.kotest.matchers.shouldBe import org.joda.time.LocalDate import org.junit.jupiter.api.Test @@ -11,7 +12,7 @@ class ContactDiaryDateFormatterExtensionTest { fun `format bulgarian date`() { LocalDate("2021-01-01").toFormattedDay( Locale("bg", "BG") - ) shouldBe "петък, 1.01.21 г." + ) shouldBeIn arrayOf("петък, 1.01.21 г.", "Петък, 1.01.21 г.") } @Test @@ -40,7 +41,7 @@ class ContactDiaryDateFormatterExtensionTest { fun `format romanian date`() { LocalDate("2021-01-05").toFormattedDay( Locale("ro", "RO") - ) shouldBe "marți, 05.01.2021" + ) shouldBeIn arrayOf("marţi, 05.01.2021", "marți, 05.01.2021") } @Test