Skip to content

Instantly share code, notes, and snippets.

@VladislavTitov
Created November 13, 2018 08:12
kotlinx.serialization custom date serializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.KSerializer
import kotlinx.serialization.SerialDescriptor
import kotlinx.serialization.Encoder
import kotlinx.serialization.Decoder
import kotlinx.serialization.internal.StringDescriptor
import java.text.DateFormat
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
import java.util.TimeZone
@Serializer(forClass = Date::class)
object DateSerializer : KSerializer<Date> {
override val descriptor: SerialDescriptor = StringDescriptor
// Consider wrapping in ThreadLocal if serialization may happen in multiple threads
private val df: DateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ", Locale.getDefault()).apply {
timeZone = TimeZone.getDefault()
}
override fun serialize(output: Encoder, obj: Date) {
output.encodeString(df.format(obj))
}
override fun deserialize(input: Decoder): Date {
return df.parse(input.decodeString())
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment