@@ -158,47 +158,50 @@ fun convertDate(
158158 resultSet : ResultSet ,
159159 fieldIndex : Int ,
160160 dbFlavour : DbFlavour ,
161- ): Date ? {
161+ ): Date ? =
162162 when (dbFlavour) {
163163 DbFlavour .SQLITE -> {
164164 val date = resultSet.getObject(fieldIndex) ? : return null
165- if (date is Long ) {
166- return Date (date)
165+ when (date) {
166+ is Long -> Date (date)
167+ is String -> convertSQliteDate(date)
168+ else -> throw KapperUnsupportedOperationException (" Conversion from type ${date.javaClass} to Date is not supported" )
167169 }
168- if (date is String ) {
169- // https://sqlite.org/lang_datefunc.html#tmval
170- if (date[2 ] == ' :' ) {
171- // time formats
172- when (date.length) {
173- 5 -> return formatters[" HH:mm" ]!! .parse(date)
174- 6 -> return formatters[" HH:mm'Z'" ]!! .parse(date)
175- 8 -> return formatters[" HH:mm:ss" ]!! .parse(date)
176- 9 -> return formatters[" HH:mm:ss'Z'" ]!! .parse(date)
177- 12 -> return formatters[" HH:mm:ss.SSS" ]!! .parse(date)
178- 13 -> return formatters[" HH:mm:ss.SSS'Z'" ]!! .parse(date)
179- }
180- } else if (date.length > 10 && date[10 ] == ' T' ) {
181- when (date.length) {
182- 16 -> return formatters[" yyyy-MM-dd'T'HH:mm" ]!! .parse(date)
183- 17 -> return formatters[" yyyy-MM-dd'T'HH:mm'Z'" ]!! .parse(date)
184- 19 -> return formatters[" yyyy-MM-dd'T'HH:mm:ss" ]!! .parse(date)
185- 20 -> return formatters[" yyyy-MM-dd'T'HH:mm:ss'Z'" ]!! .parse(date)
186- 23 -> return formatters[" yyyy-MM-dd'T'HH:mm:ss.SSS" ]!! .parse(date)
187- 24 -> return formatters[" yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" ]!! .parse(date)
188- }
189- }
190- when (date.length) {
191- 10 -> return formatters[" yyyy-MM-dd" ]!! .parse(date)
192- 16 -> return formatters[" yyyy-MM-dd HH:mm" ]!! .parse(date)
193- 17 -> return formatters[" yyyy-MM-dd HH:mm'Z'" ]!! .parse(date)
194- 19 -> return formatters[" yyyy-MM-dd HH:mm:ss" ]!! .parse(date)
195- 20 -> return formatters[" yyyy-MM-dd HH:mm:ss'Z'" ]!! .parse(date)
196- 23 -> return formatters[" yyyy-MM-dd HH:mm:ss.SSS" ]!! .parse(date)
197- 24 -> return formatters[" yyyy-MM-dd HH:mm:ss.SSS'Z'" ]!! .parse(date)
198- }
199- }
200- throw KapperUnsupportedOperationException (" Conversion from type ${date.javaClass} to Date is not supported" )
201170 }
202- else -> return resultSet.getDate(fieldIndex)?.let { Date (it.time) }
171+ else -> resultSet.getDate(fieldIndex)?.let { Date (it.time) }
203172 }
204- }
173+
174+ private fun convertSQliteDate (date : String ): Date ? =
175+ when {
176+ date[2 ] == ' :' ->
177+ when (date.length) {
178+ 5 -> formatters[" HH:mm" ]!! .parse(date)
179+ 6 -> formatters[" HH:mm'Z'" ]!! .parse(date)
180+ 8 -> formatters[" HH:mm:ss" ]!! .parse(date)
181+ 9 -> formatters[" HH:mm:ss'Z'" ]!! .parse(date)
182+ 12 -> formatters[" HH:mm:ss.SSS" ]!! .parse(date)
183+ 13 -> formatters[" HH:mm:ss.SSS'Z'" ]!! .parse(date)
184+ else -> null
185+ }
186+ date.length > 10 && date[10 ] == ' T' ->
187+ when (date.length) {
188+ 16 -> formatters[" yyyy-MM-dd'T'HH:mm" ]!! .parse(date)
189+ 17 -> formatters[" yyyy-MM-dd'T'HH:mm'Z'" ]!! .parse(date)
190+ 19 -> formatters[" yyyy-MM-dd'T'HH:mm:ss" ]!! .parse(date)
191+ 20 -> formatters[" yyyy-MM-dd'T'HH:mm:ss'Z'" ]!! .parse(date)
192+ 23 -> formatters[" yyyy-MM-dd'T'HH:mm:ss.SSS" ]!! .parse(date)
193+ 24 -> formatters[" yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" ]!! .parse(date)
194+ else -> null
195+ }
196+ else ->
197+ when (date.length) {
198+ 10 -> formatters[" yyyy-MM-dd" ]!! .parse(date)
199+ 16 -> formatters[" yyyy-MM-dd HH:mm" ]!! .parse(date)
200+ 17 -> formatters[" yyyy-MM-dd HH:mm'Z'" ]!! .parse(date)
201+ 19 -> formatters[" yyyy-MM-dd HH:mm:ss" ]!! .parse(date)
202+ 20 -> formatters[" yyyy-MM-dd HH:mm:ss'Z'" ]!! .parse(date)
203+ 23 -> formatters[" yyyy-MM-dd HH:mm:ss.SSS" ]!! .parse(date)
204+ 24 -> formatters[" yyyy-MM-dd HH:mm:ss.SSS'Z'" ]!! .parse(date)
205+ else -> null
206+ }
207+ } ? : throw KapperUnsupportedOperationException (" Cannot convert $date to Date" )
0 commit comments