Skip to content

Commit b427eae

Browse files
KopilovKopilov
authored andcommitted
fun convertToLocalDate, unit test "convert to date and time"
1 parent 7521240 commit b427eae

File tree

2 files changed

+57
-0
lines changed
  • core/src

2 files changed

+57
-0
lines changed

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/convert.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,10 @@ public fun AnyCol.convertTo(newType: KType): AnyCol {
110110
public fun <T : Any> DataColumn<T>.convertToLocalDateTime(): DataColumn<LocalDateTime> = convertTo()
111111
public fun <T : Any> DataColumn<T?>.convertToLocalDateTime(): DataColumn<LocalDateTime?> = convertTo()
112112

113+
@JvmName("convertToLocalDateFromT")
114+
public fun <T : Any> DataColumn<T>.convertToLocalDate(): DataColumn<LocalDate> = convertTo()
115+
public fun <T : Any> DataColumn<T?>.convertToLocalDate(): DataColumn<LocalDate?> = convertTo()
116+
113117
@JvmName("convertToLocalTimeFromT")
114118
public fun <T : Any> DataColumn<T>.convertToLocalTime(): DataColumn<LocalTime> = convertTo()
115119
public fun <T : Any> DataColumn<T?>.convertToLocalTime(): DataColumn<LocalTime?> = convertTo()

core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/io/ParserTests.kt

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,27 @@ package org.jetbrains.kotlinx.dataframe.io
33
import io.kotest.assertions.throwables.shouldThrow
44
import io.kotest.matchers.shouldBe
55
import kotlinx.datetime.LocalDateTime
6+
import kotlinx.datetime.TimeZone
7+
import kotlinx.datetime.toKotlinLocalDate
8+
import kotlinx.datetime.toKotlinLocalDateTime
69
import org.jetbrains.kotlinx.dataframe.DataColumn
710
import org.jetbrains.kotlinx.dataframe.DataFrame
811
import org.jetbrains.kotlinx.dataframe.api.cast
912
import org.jetbrains.kotlinx.dataframe.api.columnOf
1013
import org.jetbrains.kotlinx.dataframe.api.convertTo
1114
import org.jetbrains.kotlinx.dataframe.api.convertToDouble
15+
import org.jetbrains.kotlinx.dataframe.api.convertToLocalDate
16+
import org.jetbrains.kotlinx.dataframe.api.convertToLocalDateTime
17+
import org.jetbrains.kotlinx.dataframe.api.convertToLocalTime
1218
import org.jetbrains.kotlinx.dataframe.api.parse
1319
import org.jetbrains.kotlinx.dataframe.api.parser
20+
import org.jetbrains.kotlinx.dataframe.api.plus
21+
import org.jetbrains.kotlinx.dataframe.api.times
1422
import org.jetbrains.kotlinx.dataframe.api.tryParse
1523
import org.jetbrains.kotlinx.dataframe.exceptions.TypeConversionException
1624
import org.junit.Test
1725
import java.math.BigDecimal
26+
import java.time.LocalTime
1827
import java.util.Locale
1928
import kotlin.reflect.typeOf
2029

@@ -75,6 +84,50 @@ class ParserTests {
7584
)
7685
}
7786

87+
@Test
88+
fun `convert to date and time`() {
89+
val daysToStandardMillis = 24 * 60 * 60 * 1000L
90+
val longCol = columnOf(1L, 60L, 3600L).times(1000L).plus(daysToStandardMillis * 366)
91+
val datetimeCol = longCol.convertToLocalDateTime(TimeZone.UTC)
92+
93+
datetimeCol.shouldBe(
94+
columnOf(
95+
java.time.LocalDateTime.of(1971, 1, 2, 0, 0, 1).toKotlinLocalDateTime(),
96+
java.time.LocalDateTime.of(1971, 1, 2, 0, 1, 0).toKotlinLocalDateTime(),
97+
java.time.LocalDateTime.of(1971, 1, 2, 1, 0, 0).toKotlinLocalDateTime()
98+
)
99+
)
100+
longCol.convertToLocalDate(TimeZone.UTC).shouldBe(
101+
columnOf(
102+
java.time.LocalDate.of(1971, 1, 2).toKotlinLocalDate(),
103+
java.time.LocalDate.of(1971, 1, 2).toKotlinLocalDate(),
104+
java.time.LocalDate.of(1971, 1, 2).toKotlinLocalDate()
105+
)
106+
)
107+
longCol.convertToLocalTime(TimeZone.UTC).shouldBe(
108+
columnOf(
109+
LocalTime.of(0, 0, 1),
110+
LocalTime.of(0, 1, 0),
111+
LocalTime.of(1, 0, 0)
112+
)
113+
)
114+
115+
datetimeCol.convertToLocalDate().shouldBe(
116+
columnOf(
117+
java.time.LocalDate.of(1971, 1, 2).toKotlinLocalDate(),
118+
java.time.LocalDate.of(1971, 1, 2).toKotlinLocalDate(),
119+
java.time.LocalDate.of(1971, 1, 2).toKotlinLocalDate()
120+
)
121+
)
122+
datetimeCol.convertToLocalTime().shouldBe(
123+
columnOf(
124+
LocalTime.of(0, 0, 1),
125+
LocalTime.of(0, 1, 0),
126+
LocalTime.of(1, 0, 0)
127+
)
128+
)
129+
}
130+
78131
@Test
79132
fun `converting String to Double in different locales`() {
80133
val currentLocale = Locale.getDefault()

0 commit comments

Comments
 (0)