Move date handler out of data

This commit is contained in:
Syer10
2024-09-21 13:49:14 -04:00
parent a4a828dc62
commit 35ea833510
8 changed files with 18 additions and 42 deletions

View File

@@ -0,0 +1,12 @@
package ca.gosyer.jui.core.util
import kotlinx.datetime.Instant
@Suppress("NO_ACTUAL_FOR_EXPECT")
expect class DateHandler {
val formatOptions: List<String>
fun getDateFormat(format: String): (Instant) -> String
val dateTimeFormat: (Instant) -> String
}

View File

@@ -0,0 +1,52 @@
package ca.gosyer.jui.core.util
import androidx.compose.ui.text.intl.Locale
import ca.gosyer.jui.core.lang.toPlatform
import kotlinx.datetime.Instant
import me.tatarka.inject.annotations.Inject
actual class DateHandler
@Inject
constructor() {
actual val formatOptions by lazy {
listOf(
"",
"MM/dd/yy",
"dd/MM/yy",
"yyyy-MM-dd",
)
}
actual fun getDateFormat(format: String): (Instant) -> String =
when (format) {
"" -> NSDateFormatter()
.apply {
setDateStyle(NSDateFormatterShortStyle)
setTimeStyle(NSDateFormatterNoStyle)
setLocale(Locale.current.toPlatform())
}
else -> NSDateFormatter()
.apply {
setDateFormat(format)
}
}.let { formatter ->
{
formatter.stringFromDate(it.toNSDate())
}
}
actual val dateTimeFormat: (Instant) -> String by lazy {
NSDateFormatter()
.apply {
setDateStyle(NSDateFormatterShortStyle)
setTimeStyle(NSDateFormatterShortStyle)
setLocale(Locale.current.toPlatform())
}
.let { formatter ->
{
formatter.stringFromDate(it.toNSDate())
}
}
}
}

View File

@@ -0,0 +1,48 @@
package ca.gosyer.jui.core.util
import androidx.compose.ui.text.intl.Locale
import ca.gosyer.jui.core.lang.toPlatform
import kotlinx.datetime.Instant
import kotlinx.datetime.toJavaInstant
import me.tatarka.inject.annotations.Inject
import java.time.ZoneId
import java.time.format.DateTimeFormatter
import java.time.format.FormatStyle
actual class DateHandler
@Inject
constructor() {
actual val formatOptions by lazy {
listOf(
"",
"MM/dd/yy",
"dd/MM/yy",
"yyyy-MM-dd",
)
}
actual fun getDateFormat(format: String): (Instant) -> String =
when (format) {
"" -> DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)
.withLocale(Locale.current.toPlatform())
.withZone(ZoneId.systemDefault())
else -> DateTimeFormatter.ofPattern(format)
.withZone(ZoneId.systemDefault())
}.let { formatter ->
{
formatter.format(it.toJavaInstant())
}
}
actual val dateTimeFormat: (Instant) -> String by lazy {
DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT)
.withLocale(Locale.current.toPlatform())
.withZone(ZoneId.systemDefault())
.let { formatter ->
{
formatter.format(it.toJavaInstant())
}
}
}
}