Skip to content

Commit

Permalink
Fix datetime and timestamp (#118)
Browse files Browse the repository at this point in the history
  • Loading branch information
koxudaxi authored Apr 6, 2021
1 parent a4ba85e commit 3a98a91
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ val TIME = listOf(Types.TIME)
val TIME_TZ = listOf(Types.TIME_WITH_TIMEZONE)

fun stripNanoSecs(time: String): String {
if ('.' !in time) return time
val splitTime = time.split(".")
return splitTime[0] + ".${splitTime[1]}".dropLastWhile { char -> char == '0' || char == '.' }
}
Expand All @@ -44,6 +45,14 @@ fun convertOffsetTimeToUTC(input: String): String {
}


fun formatDatetime(input: String): String {
return stripNanoSecs(Regex("^[^.]+\\.\\d{1,6}|^[^.]+").find(input)!!.value)
}

fun formatTime(input: String): String {
return stripNanoSecs(Regex("^[^.]+\\.\\d{1,3}|^[^.]+").find(input)!!.value)
}

fun createField(resultSet: ResultSet, index: Int): Field {
if (resultSet.getObject(index) == null) {
return Field(isNull = true)
Expand All @@ -56,12 +65,10 @@ fun createField(resultSet: ResultSet, index: Int): Field {
value in BLOB -> Field(blobValue = Base64.getEncoder().encodeToString(resultSet.getBytes(index)))
value in DATETIME_TZ || (value in DATETIME && resultSet.metaData.getColumnTypeName(index) == "timestamptz")
-> Field(stringValue = convertOffsetDatetimeToUTC(resultSet.getString(index)))
value in DATETIME -> Field(stringValue = Regex("^[^.]+\\.\\d{1,6}|^[^.]+").find(resultSet.getString(
index))!!.value)
value in DATETIME -> Field(stringValue = formatDatetime(resultSet.getString(index)))
value in TIME_TZ || (value in TIME && resultSet.metaData.getColumnTypeName(index) == "timetz")
-> Field(stringValue = convertOffsetTimeToUTC(resultSet.getString(index)))
value in TIME -> Field(stringValue = Regex("^[^.]+\\.\\d{1,3}|^[^.]+").find(resultSet.getString(
index))!!.value)
value in TIME -> Field(stringValue = formatTime(resultSet.getString(index)))
else -> Field(stringValue = resultSet.getString(index))
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ class LocalDataApiTest {
assertEquals("2021-03-10 20:41:04.123", convertOffsetDatetimeToUTC("2021-03-10 22:41:04.123+02"))
assertEquals("2021-03-10 20:41:04.12", convertOffsetDatetimeToUTC("2021-03-10 22:41:04.12+02"))
assertEquals("2021-03-10 20:41:04.1", convertOffsetDatetimeToUTC("2021-03-10 22:41:04.1+02"))
assertEquals("2021-03-10 20:41:04", convertOffsetDatetimeToUTC("2021-03-10 22:41:04.0+02"))
assertEquals("2021-03-10 20:41:04", convertOffsetDatetimeToUTC("2021-03-10 22:41:04+02"))
assertEquals("2021-03-10 20:41:04.00005", convertOffsetDatetimeToUTC("2021-03-10 22:41:04.000050+02"))
assertEquals("2021-03-10 20:41:04.0004", convertOffsetDatetimeToUTC("2021-03-10 22:41:04.000400+02"))
Expand All @@ -64,6 +65,7 @@ class LocalDataApiTest {
assertEquals("20:41:04.123", convertOffsetTimeToUTC("22:41:04.123+02"))
assertEquals("20:41:04.12", convertOffsetTimeToUTC("22:41:04.12+02"))
assertEquals("20:41:04.1", convertOffsetTimeToUTC("22:41:04.1+02"))
assertEquals("20:41:04", convertOffsetTimeToUTC("22:41:04.0+02"))
assertEquals("20:41:04", convertOffsetTimeToUTC("22:41:04+02"))
assertEquals("20:41:04", convertOffsetTimeToUTC("22:41:04.000050+02"))
assertEquals("20:41:04", convertOffsetTimeToUTC("22:41:04.000400+02"))
Expand All @@ -72,6 +74,54 @@ class LocalDataApiTest {
assertEquals("20:41:04", convertOffsetTimeToUTC("22:41:04.000000+02"))
}

@Test
fun testFormatDatetime() {
assertEquals("2021-03-10 20:41:04.123456", formatDatetime("2021-03-10 20:41:04.123456"))
assertEquals("2021-03-10 20:41:04.123456", formatDatetime("2021-03-10 20:41:04.123456"))
assertEquals("2021-03-10 20:41:04.12345", formatDatetime("2021-03-10 20:41:04.123450"))
assertEquals("2021-03-10 20:41:04.1234", formatDatetime("2021-03-10 20:41:04.123400"))
assertEquals("2021-03-10 20:41:04.123", formatDatetime("2021-03-10 20:41:04.123000"))
assertEquals("2021-03-10 20:41:04.12", formatDatetime("2021-03-10 20:41:04.120000"))
assertEquals("2021-03-10 20:41:04.1", formatDatetime("2021-03-10 20:41:04.100000"))
assertEquals("2021-03-10 20:41:04", formatDatetime("2021-03-10 20:41:04.000000"))
assertEquals("2021-03-10 20:41:04.12345", formatDatetime("2021-03-10 20:41:04.12345"))
assertEquals("2021-03-10 20:41:04.1234", formatDatetime("2021-03-10 20:41:04.1234"))
assertEquals("2021-03-10 20:41:04.123", formatDatetime("2021-03-10 20:41:04.123"))
assertEquals("2021-03-10 20:41:04.12", formatDatetime("2021-03-10 20:41:04.12"))
assertEquals("2021-03-10 20:41:04.1", formatDatetime("2021-03-10 20:41:04.1"))
assertEquals("2021-03-10 20:41:04", formatDatetime("2021-03-10 20:41:04.0"))
assertEquals("2021-03-10 20:41:04", formatDatetime("2021-03-10 20:41:04"))
assertEquals("2021-03-10 20:41:04.00005", formatDatetime("2021-03-10 20:41:04.000050"))
assertEquals("2021-03-10 20:41:04.0004", formatDatetime("2021-03-10 20:41:04.000400"))
assertEquals("2021-03-10 20:41:04.003", formatDatetime("2021-03-10 20:41:04.003000"))
assertEquals("2021-03-10 20:41:04.02", formatDatetime("2021-03-10 20:41:04.020000"))
assertEquals("2021-03-10 20:41:04", formatDatetime("2021-03-10 20:41:04.000000"))
}

@Test
fun testFormatTime() {
assertEquals("20:41:04.123", formatTime("20:41:04.123456"))
assertEquals("20:41:04.123", formatTime("20:41:04.123456"))
assertEquals("20:41:04.123", formatTime("20:41:04.123450"))
assertEquals("20:41:04.123", formatTime("20:41:04.123400"))
assertEquals("20:41:04.123", formatTime("20:41:04.123000"))
assertEquals("20:41:04.12", formatTime("20:41:04.120000"))
assertEquals("20:41:04.1", formatTime("20:41:04.100000"))
assertEquals("20:41:04", formatTime("20:41:04.000000"))
assertEquals("20:41:04.123", formatTime("20:41:04.12345"))
assertEquals("20:41:04.123", formatTime("20:41:04.1234"))
assertEquals("20:41:04.123", formatTime("20:41:04.123"))
assertEquals("20:41:04.12", formatTime("20:41:04.12"))
assertEquals("20:41:04.1", formatTime("20:41:04.1"))
assertEquals("20:41:04", formatTime("20:41:04.0"))
assertEquals("20:41:04", formatTime("20:41:04"))
assertEquals("20:41:04", formatTime("20:41:04.000050"))
assertEquals("20:41:04", formatTime("20:41:04.000400"))
assertEquals("20:41:04.003", formatTime("20:41:04.003000"))
assertEquals("20:41:04.02", formatTime("20:41:04.020000"))
assertEquals("20:41:04", formatTime("20:41:04.000000"))
}

@Test
fun testCreateField() {
// For PostgreSQL
Expand Down

0 comments on commit 3a98a91

Please sign in to comment.