Skip to content

Commit b1dd800

Browse files
authored
Specify time zone in example code to fix test instability across locales (#2664)
Fixes #2663
1 parent d5a4d30 commit b1dd800

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

docs/serializers.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -862,6 +862,7 @@ every time, especially for classes like `Date` or `Instant` that have a fixed st
862862
For such cases, it is possible to specify serializers using `typealias`es, as they preserve annotations, including serialization-related ones:
863863
<!--- INCLUDE
864864
import java.util.Date
865+
import java.util.TimeZone
865866
import java.text.SimpleDateFormat
866867

867868
object DateAsLongSerializer : KSerializer<Date> {
@@ -872,7 +873,11 @@ object DateAsLongSerializer : KSerializer<Date> {
872873

873874
object DateAsSimpleTextSerializer: KSerializer<Date> {
874875
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("DateAsSimpleText", PrimitiveKind.LONG)
875-
private val format = SimpleDateFormat("yyyy-MM-dd")
876+
private val format = SimpleDateFormat("yyyy-MM-dd").apply {
877+
// Here we explicitly set time zone to UTC so output for this sample remains locale-independent.
878+
// Depending on your needs, you may have to adjust or remove this line.
879+
setTimeZone(TimeZone.getTimeZone("UTC"))
880+
}
876881
override fun serialize(encoder: Encoder, value: Date) = encoder.encodeString(format.format(value))
877882
override fun deserialize(decoder: Decoder): Date = format.parse(decoder.decodeString())
878883
}

guide/example/example-serializer-18.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import kotlinx.serialization.encoding.*
77
import kotlinx.serialization.descriptors.*
88

99
import java.util.Date
10+
import java.util.TimeZone
1011
import java.text.SimpleDateFormat
1112

1213
object DateAsLongSerializer : KSerializer<Date> {
@@ -17,7 +18,11 @@ object DateAsLongSerializer : KSerializer<Date> {
1718

1819
object DateAsSimpleTextSerializer: KSerializer<Date> {
1920
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("DateAsSimpleText", PrimitiveKind.LONG)
20-
private val format = SimpleDateFormat("yyyy-MM-dd")
21+
private val format = SimpleDateFormat("yyyy-MM-dd").apply {
22+
// Here we explicitly set time zone to UTC so output for this sample remains locale-independent.
23+
// Depending on your needs, you may have to adjust or remove this line.
24+
setTimeZone(TimeZone.getTimeZone("UTC"))
25+
}
2126
override fun serialize(encoder: Encoder, value: Date) = encoder.encodeString(format.format(value))
2227
override fun deserialize(decoder: Decoder): Date = format.parse(decoder.decodeString())
2328
}

0 commit comments

Comments
 (0)