Skip to content

Instantly share code, notes, and snippets.

@VladislavTitov
Created November 13, 2018 08:12
Show Gist options
  • Save VladislavTitov/9a7673ae8c442d20296fea6855a776dc to your computer and use it in GitHub Desktop.
Save VladislavTitov/9a7673ae8c442d20296fea6855a776dc to your computer and use it in GitHub Desktop.
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