1
1
package org.jetbrains.kotlinx.dataframe.io
2
2
3
+ import kotlinx.datetime.Instant
3
4
import kotlinx.datetime.LocalDate
4
5
import kotlinx.datetime.LocalDateTime
5
6
import kotlinx.datetime.LocalTime
7
+ import kotlinx.datetime.TimeZone
6
8
import kotlinx.datetime.toKotlinLocalDate
7
9
import kotlinx.datetime.toKotlinLocalDateTime
8
10
import kotlinx.datetime.toKotlinLocalTime
11
+ import kotlinx.datetime.toLocalDateTime
9
12
import org.apache.arrow.memory.RootAllocator
10
13
import org.apache.arrow.vector.BigIntVector
11
14
import org.apache.arrow.vector.BitVector
@@ -21,6 +24,7 @@ import org.apache.arrow.vector.LargeVarBinaryVector
21
24
import org.apache.arrow.vector.LargeVarCharVector
22
25
import org.apache.arrow.vector.NullVector
23
26
import org.apache.arrow.vector.SmallIntVector
27
+ import org.apache.arrow.vector.TimeStampMicroTZVector
24
28
import org.apache.arrow.vector.TimeMicroVector
25
29
import org.apache.arrow.vector.TimeMilliVector
26
30
import org.apache.arrow.vector.TimeNanoVector
@@ -179,6 +183,16 @@ private fun TimeStampMicroVector.values(range: IntRange): List<LocalDateTime?> =
179
183
}
180
184
}
181
185
186
+ private fun TimeStampMicroTZVector.values (range : IntRange ): List <LocalDateTime ?> =
187
+ range.mapIndexed { i, it ->
188
+ if (isNull(i)) {
189
+ null
190
+ } else {
191
+ Instant .fromEpochMilliseconds(getObject(it) / 1000 )
192
+ .toLocalDateTime(TimeZone .of(this .timeZone))
193
+ }
194
+ }
195
+
182
196
private fun TimeStampMilliVector.values (range : IntRange ): List <LocalDateTime ?> =
183
197
range.mapIndexed { i, it ->
184
198
if (isNull(i)) {
@@ -345,6 +359,8 @@ private fun readField(root: VectorSchemaRoot, field: Field, nullability: Nullabi
345
359
346
360
is TimeStampMicroVector -> vector.values(range).withTypeNullable(field.isNullable, nullability)
347
361
362
+ is TimeStampMicroTZVector -> vector.values(range).withTypeNullable(field.isNullable, nullability)
363
+
348
364
is TimeStampMilliVector -> vector.values(range).withTypeNullable(field.isNullable, nullability)
349
365
350
366
is TimeStampSecVector -> vector.values(range).withTypeNullable(field.isNullable, nullability)
0 commit comments