fix(#24): format user-visible dates as dd MMM yyyy

This commit is contained in:
Achmad Setyabudi Susilo
2026-06-28 21:30:32 +07:00
parent 903cd3a70d
commit dca79df056
5 changed files with 13 additions and 8 deletions
@@ -21,10 +21,10 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import dev.achmad.ledgerr.R import dev.achmad.ledgerr.R
import dev.achmad.ledgerr.ui.util.dateFormatter
import java.time.Instant import java.time.Instant
import java.time.LocalDate import java.time.LocalDate
import java.time.ZoneId import java.time.ZoneId
import java.time.format.DateTimeFormatter
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@@ -37,7 +37,7 @@ fun DateField(
var showPicker by remember { mutableStateOf(false) } var showPicker by remember { mutableStateOf(false) }
OutlinedTextField( OutlinedTextField(
value = date.format(DateTimeFormatter.ISO_LOCAL_DATE), value = date.format(dateFormatter()),
onValueChange = {}, onValueChange = {},
label = { Text(label) }, label = { Text(label) },
readOnly = true, readOnly = true,
@@ -32,6 +32,7 @@ import androidx.compose.ui.unit.dp
import dev.achmad.ledgerr.R import dev.achmad.ledgerr.R
import dev.achmad.ledgerr.domain.expense.model.DateRange import dev.achmad.ledgerr.domain.expense.model.DateRange
import dev.achmad.ledgerr.ui.components.preference.widget.TextPreferenceWidget import dev.achmad.ledgerr.ui.components.preference.widget.TextPreferenceWidget
import dev.achmad.ledgerr.ui.util.dateFormatter
import java.time.Instant import java.time.Instant
import java.time.LocalDate import java.time.LocalDate
import java.time.ZoneId import java.time.ZoneId
@@ -172,7 +173,7 @@ private fun DateField(
var showPicker by remember { mutableStateOf(false) } var showPicker by remember { mutableStateOf(false) }
OutlinedTextField( OutlinedTextField(
value = date.format(DateTimeFormatter.ISO_LOCAL_DATE), value = date.format(dateFormatter()),
onValueChange = {}, onValueChange = {},
label = { Text(label) }, label = { Text(label) },
readOnly = true, readOnly = true,
@@ -70,8 +70,8 @@ import dev.achmad.ledgerr.ui.components.SingleSelectFilterChipGroup
import dev.achmad.ledgerr.ui.screens.add_edit_expense.AddEditExpenseScreen import dev.achmad.ledgerr.ui.screens.add_edit_expense.AddEditExpenseScreen
import dev.achmad.ledgerr.ui.screens.add_edit_recurring.AddEditRecurringScreen import dev.achmad.ledgerr.ui.screens.add_edit_recurring.AddEditRecurringScreen
import dev.achmad.ledgerr.ui.screens.import_bank_statement.ImportBankStatementScreen import dev.achmad.ledgerr.ui.screens.import_bank_statement.ImportBankStatementScreen
import dev.achmad.ledgerr.ui.util.dateFormatter
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.time.format.DateTimeFormatter
object ExpenseListScreen : Screen { object ExpenseListScreen : Screen {
@@ -365,7 +365,7 @@ private fun ExpenseRow(
) )
} }
Text( Text(
text = item.expense.date.format(DateTimeFormatter.ISO_LOCAL_DATE), text = item.expense.date.format(dateFormatter()),
style = MaterialTheme.typography.bodySmall, style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.onSurfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant,
) )
@@ -412,7 +412,7 @@ private fun RecurringRow(
RecurringInterval.YEARLY -> stringResource(R.string.add_edit_recurring_interval_yearly) RecurringInterval.YEARLY -> stringResource(R.string.add_edit_recurring_interval_yearly)
} }
Text( Text(
text = "$intervalText · ${item.recurring.nextDueDate.format(DateTimeFormatter.ISO_LOCAL_DATE)}", text = "$intervalText · ${item.recurring.nextDueDate.format(dateFormatter())}",
style = MaterialTheme.typography.bodySmall, style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.onSurfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant,
) )
@@ -77,8 +77,8 @@ import dev.achmad.ledgerr.ui.screens.add_edit_expense.AddEditExpenseScreen
import dev.achmad.ledgerr.ui.screens.expenses.ExpenseListScreen import dev.achmad.ledgerr.ui.screens.expenses.ExpenseListScreen
import dev.achmad.ledgerr.ui.screens.import_bank_statement.ImportBankStatementScreen import dev.achmad.ledgerr.ui.screens.import_bank_statement.ImportBankStatementScreen
import dev.achmad.ledgerr.ui.screens.settings.SettingsScreen import dev.achmad.ledgerr.ui.screens.settings.SettingsScreen
import dev.achmad.ledgerr.ui.util.dateFormatter
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.time.format.DateTimeFormatter
object HomeScreen : Screen { object HomeScreen : Screen {
@@ -443,7 +443,7 @@ private fun ExpenseRow(item: ExpenseWithCategory) {
) )
} }
Text( Text(
text = item.expense.date.format(DateTimeFormatter.ISO_LOCAL_DATE), text = item.expense.date.format(dateFormatter()),
style = MaterialTheme.typography.bodySmall, style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.onSurfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant,
) )
@@ -1,6 +1,7 @@
package dev.achmad.ledgerr.ui.util package dev.achmad.ledgerr.ui.util
import java.time.format.DateTimeFormatter import java.time.format.DateTimeFormatter
import java.util.Locale
fun timeFormatter(is24Hour: Boolean): DateTimeFormatter { fun timeFormatter(is24Hour: Boolean): DateTimeFormatter {
return if (is24Hour) { return if (is24Hour) {
@@ -10,6 +11,9 @@ fun timeFormatter(is24Hour: Boolean): DateTimeFormatter {
} }
} }
fun dateFormatter(): DateTimeFormatter =
DateTimeFormatter.ofPattern("dd MMM yyyy", Locale.getDefault())
fun String.toTitleCase(): String { fun String.toTitleCase(): String {
return this.lowercase().split(" ").joinToString(" ") { word -> return this.lowercase().split(" ").joinToString(" ") { word ->
word.replaceFirstChar { it.uppercase() } word.replaceFirstChar { it.uppercase() }