From 8aedd38b51671a885bd819a67c4658812516e45e Mon Sep 17 00:00:00 2001 From: atsunatsu Date: Sun, 2 Aug 2026 20:28:56 +0800 Subject: [PATCH] fix: consistent Chinese date format for pass headers and sun times MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extract dateFormat() helper to ensure computeSunTimes and groupPasses use identical date format, fixing sunrise/sunset display bug. For Chinese locale: "2026年8月1日 星期六" For English locale: "Sat, 01 Aug 2026" --- .../look4sat/feature/passes/PassesViewModel.kt | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/feature/passes/src/main/java/com/rtbishop/look4sat/feature/passes/PassesViewModel.kt b/feature/passes/src/main/java/com/rtbishop/look4sat/feature/passes/PassesViewModel.kt index 9227ef04..fbd41078 100644 --- a/feature/passes/src/main/java/com/rtbishop/look4sat/feature/passes/PassesViewModel.kt +++ b/feature/passes/src/main/java/com/rtbishop/look4sat/feature/passes/PassesViewModel.kt @@ -152,11 +152,21 @@ class PassesViewModel( } } + /** Returns a locale-appropriate date format for pass grouping headers. */ + private fun dateFormat(tz: TimeZone): SimpleDateFormat { + val pattern = if (Locale.getDefault().language == "zh") { + "yyyy'年'M'月'd'日' EEEE" + } else { + "EEE, dd MMM yyyy" + } + return SimpleDateFormat(pattern, Locale.getDefault()).also { it.timeZone = tz } + } + // Computes sunrise/sunset strings for each unique calendar day in the pass list, plus today for DeepSpace private fun computeSunTimes(passes: List, isUtc: Boolean): Map> { val stationPos = settingsRepo.stationPosition.value val tz = if (isUtc) TimeZone.getTimeZone("UTC") else TimeZone.getDefault() - val sdfDate = SimpleDateFormat("EEE, dd MMM yyyy", Locale.getDefault()).also { it.timeZone = tz } + val sdfDate = dateFormat(tz) val sdfTime = SimpleDateFormat("HH:mm", Locale.getDefault()).also { it.timeZone = tz } val result = LinkedHashMap>() // DeepSpace group always shows today's sun times @@ -180,7 +190,7 @@ class PassesViewModel( private fun groupPasses(passes: List, isUtc: Boolean): Map> { val tz = if (isUtc) TimeZone.getTimeZone("UTC") else TimeZone.getDefault() - val sdfDate = SimpleDateFormat("EEE, dd MMM yyyy", Locale.getDefault()).also { it.timeZone = tz } + val sdfDate = dateFormat(tz) val ordered = LinkedHashMap>() val deepSpace = passes.filter { it.isDeepSpace } if (deepSpace.isNotEmpty()) ordered["DeepSpace (period >225min)"] = deepSpace