All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.jasync.sql.db.column.TimestampEncoderDecoder.kt Maven / Gradle / Ivy

package com.github.jasync.sql.db.column

import com.github.jasync.sql.db.exceptions.DateEncoderNotAvailableException
import org.joda.time.DateTime
import org.joda.time.LocalDateTime
import org.joda.time.ReadableDateTime
import org.joda.time.format.DateTimeFormatterBuilder
import java.sql.Timestamp
import java.util.*


open class TimestampEncoderDecoder : ColumnEncoderDecoder {
    companion object {
        const val BaseFormat = "yyyy-MM-dd HH:mm:ss"
        const val MillisFormat = ".SSSSSS"
        val Instance = TimestampEncoderDecoder()

    }

    private val optional = DateTimeFormatterBuilder()
        .appendPattern(MillisFormat).toParser()
    private val optionalTimeZone = DateTimeFormatterBuilder()
        .appendPattern("Z").toParser()

    private val builder = DateTimeFormatterBuilder()
        .appendPattern(BaseFormat)
        .appendOptional(optional)
        .appendOptional(optionalTimeZone)

    private val timezonedPrinter = DateTimeFormatterBuilder()
        .appendPattern("${BaseFormat}${MillisFormat}Z").toFormatter()

    private val nonTimezonedPrinter = DateTimeFormatterBuilder()
        .appendPattern("${BaseFormat}${MillisFormat}").toFormatter()

    private val format = builder.toFormatter()

    open fun formatter() = format

    override fun decode(value: String): Any {
        return formatter().parseLocalDateTime(value)
    }

    override fun encode(value: Any): String {
        return when (value) {
            is Timestamp -> this.timezonedPrinter.print(DateTime(value))
            is Date -> this.timezonedPrinter.print(DateTime(value))
            is Calendar -> this.timezonedPrinter.print(DateTime(value))
            is LocalDateTime -> this.nonTimezonedPrinter.print(value)
            is ReadableDateTime -> this.timezonedPrinter.print(value)
            else -> throw DateEncoderNotAvailableException(value)
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy