Skip to content

Commit

Permalink
Specify time zone in example code to fix test instability across locales
Browse files Browse the repository at this point in the history
Addresses Kotlin#2663
  • Loading branch information
timmc committed May 6, 2024
1 parent 251bca7 commit be061e1
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 2 deletions.
5 changes: 4 additions & 1 deletion docs/serializers.md
Original file line number Diff line number Diff line change
Expand Up @@ -862,6 +862,7 @@ every time, especially for classes like `Date` or `Instant` that have a fixed st
For such cases, it is possible to specify serializers using `typealias`es, as they preserve annotations, including serialization-related ones:
<!--- INCLUDE
import java.util.Date
import java.util.TimeZone
import java.text.SimpleDateFormat

object DateAsLongSerializer : KSerializer<Date> {
Expand All @@ -872,7 +873,9 @@ object DateAsLongSerializer : KSerializer<Date> {

object DateAsSimpleTextSerializer: KSerializer<Date> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("DateAsSimpleText", PrimitiveKind.LONG)
private val format = SimpleDateFormat("yyyy-MM-dd")
private val format = SimpleDateFormat("yyyy-MM-dd").apply {
setTimeZone(TimeZone.getTimeZone("UTC"))
}
override fun serialize(encoder: Encoder, value: Date) = encoder.encodeString(format.format(value))
override fun deserialize(decoder: Decoder): Date = format.parse(decoder.decodeString())
}
Expand Down
5 changes: 4 additions & 1 deletion guide/example/example-serializer-18.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import kotlinx.serialization.encoding.*
import kotlinx.serialization.descriptors.*

import java.util.Date
import java.util.TimeZone
import java.text.SimpleDateFormat

object DateAsLongSerializer : KSerializer<Date> {
Expand All @@ -17,7 +18,9 @@ object DateAsLongSerializer : KSerializer<Date> {

object DateAsSimpleTextSerializer: KSerializer<Date> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("DateAsSimpleText", PrimitiveKind.LONG)
private val format = SimpleDateFormat("yyyy-MM-dd")
private val format = SimpleDateFormat("yyyy-MM-dd").apply {
setTimeZone(TimeZone.getTimeZone("UTC"))
}
override fun serialize(encoder: Encoder, value: Date) = encoder.encodeString(format.format(value))
override fun deserialize(decoder: Decoder): Date = format.parse(decoder.decodeString())
}
Expand Down

0 comments on commit be061e1

Please sign in to comment.