Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Duplicate monthNumber in format factory after migrate to 0.7.1 #566

Open
Labels
bugSomething isn't working
@TakanashiHitomi

Description

Hello,
After I migrate lib from 0.6.2 to 0.7.1, I found some crash in my application.
Seems there are 2 monthNumber in my format, but there should be only one.
And this crash is not shown every time, just several Android 11 and 8 devices.

I test these codes in emulator for several times, but none of them show this bug.
Please notify me if anything wrong in my code.

Thanks!

Fatal Exception: java.lang.IllegalArgumentException: At most one variable-length numeric field in a row is allowed, but got several: [monthNumber, monthNumber]. Parsing is undefined: for example, with variable-length month number and variable-length day of month, '111' can be parsed as Jan 11th or Nov 1st.
 at kotlinx.datetime.internal.format.parser.NumberSpanParserOperation.<init>(ParserOperation.kt:56)
 at kotlinx.datetime.internal.format.parser.ParserKt.concat$simplify(Parser.kt:96)
 at kotlinx.datetime.internal.format.parser.ParserKt.concat(Parser.kt:125)
 at kotlinx.datetime.internal.format.ConcatenatedFormatStructure.parser(FormatStructure.kt:233)
 at kotlinx.datetime.internal.format.CachedFormatStructure.<init>(FormatStructure.kt:248)
 at kotlinx.datetime.format.AbstractDateTimeFormatBuilder.build(DateTimeFormatBuilder.kt:476)
 at kotlinx.datetime.format.DateTimeComponents$Companion.Format(DateTimeComponents.kt:59)
 at [my.package.name].TimeFormatKt.dateTimeFormat(TimeFormat.kt:50)
// TimeFormat.kt
fun Instant.dateTimeFormat(): String {
 val targetDateTime = this.toLocalDateTime(TimeZone.currentSystemDefault())
 val currentDateTime = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault())
 val isSameYear = targetDateTime.year == currentDateTime.year
 val isSameDate = isSameYear &&
 targetDateTime.monthNumber == currentDateTime.monthNumber &&
 targetDateTime.dayOfMonth == currentDateTime.dayOfMonth
 // crash report here
 val format = DateTimeComponents.Format {
 if (isSameDate) {
 char(' ')
 hour(); char(':'); minute()
 } else {
 monthNumber(); char('/'); dayOfMonth(); if (isSameYear.not()) {
 char('/'); year()
 }
 }
 }
 return format(format)
}
// Display.kt
Text(
 text = item.lastMessageDate?.dateTimeFormat() ?: "",
 style = MaterialTheme.typography.bodySmall,
 color = MaterialTheme.colorScheme.descriptionText,
)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

        AltStyle によって変換されたページ (->オリジナル) /