@@ -3,13 +3,15 @@ package org.jetbrains.kotlinx.dataframe.impl.api
3
3
import kotlinx.datetime.Instant
4
4
import kotlinx.datetime.LocalDate
5
5
import kotlinx.datetime.LocalDateTime
6
+ import kotlinx.datetime.LocalTime
6
7
import kotlinx.datetime.TimeZone
7
8
import kotlinx.datetime.atStartOfDayIn
8
9
import kotlinx.datetime.atTime
9
10
import kotlinx.datetime.toInstant
10
11
import kotlinx.datetime.toJavaInstant
11
12
import kotlinx.datetime.toJavaLocalDate
12
13
import kotlinx.datetime.toJavaLocalDateTime
14
+ import kotlinx.datetime.toJavaLocalTime
13
15
import kotlinx.datetime.toKotlinInstant
14
16
import kotlinx.datetime.toKotlinLocalDate
15
17
import kotlinx.datetime.toKotlinLocalDateTime
@@ -38,7 +40,6 @@ import org.jetbrains.kotlinx.dataframe.path
38
40
import org.jetbrains.kotlinx.dataframe.type
39
41
import java.math.BigDecimal
40
42
import java.net.URL
41
- import java.time.LocalTime
42
43
import java.util.Locale
43
44
import kotlin.math.roundToInt
44
45
import kotlin.math.roundToLong
@@ -49,6 +50,10 @@ import kotlin.reflect.full.memberProperties
49
50
import kotlin.reflect.full.primaryConstructor
50
51
import kotlin.reflect.full.withNullability
51
52
import kotlin.reflect.jvm.jvmErasure
53
+ import java.time.Instant as JavaInstant
54
+ import java.time.LocalDate as JavaLocalDate
55
+ import java.time.LocalDateTime as JavaLocalDateTime
56
+ import java.time.LocalTime as JavaLocalTime
52
57
53
58
@PublishedApi
54
59
internal fun <T , C , R > Convert <T , C >.withRowCellImpl (
@@ -299,13 +304,19 @@ internal fun createConverter(from: KType, to: KType, options: ParserOptions? = n
299
304
300
305
LocalDate ::class -> convert<Int > { it.toLong().toLocalDate(defaultTimeZone) }
301
306
302
- java.time.LocalDateTime ::class -> convert<Long > {
303
- it.toLocalDateTime(defaultTimeZone).toJavaLocalDateTime()
307
+ LocalTime ::class -> convert<Int > { it.toLong().toLocalTime(defaultTimeZone) }
308
+
309
+ Instant ::class -> convert<Int > { Instant .fromEpochMilliseconds(it.toLong()) }
310
+
311
+ JavaLocalDateTime ::class -> convert<Int > {
312
+ it.toLong().toLocalDateTime(defaultTimeZone).toJavaLocalDateTime()
304
313
}
305
314
306
- java.time. LocalDate ::class -> convert<Long > { it.toLocalDate(defaultTimeZone).toJavaLocalDate() }
315
+ JavaLocalDate ::class -> convert<Int > { it.toLong() .toLocalDate(defaultTimeZone).toJavaLocalDate() }
307
316
308
- LocalTime ::class -> convert<Int > { it.toLong().toLocalTime(defaultTimeZone) }
317
+ JavaLocalTime ::class -> convert<Int > { it.toLong().toLocalTime(defaultTimeZone).toJavaLocalTime() }
318
+
319
+ JavaInstant ::class -> convert<Int > { JavaInstant .ofEpochMilli(it.toLong()) }
309
320
310
321
else -> null
311
322
}
@@ -341,13 +352,15 @@ internal fun createConverter(from: KType, to: KType, options: ParserOptions? = n
341
352
342
353
Instant ::class -> convert<Long > { Instant .fromEpochMilliseconds(it) }
343
354
344
- java.time. LocalDateTime ::class -> convert<Long > {
355
+ JavaLocalDateTime ::class -> convert<Long > {
345
356
it.toLocalDateTime(defaultTimeZone).toJavaLocalDateTime()
346
357
}
347
358
348
- java.time.LocalDate ::class -> convert<Long > { it.toLocalDate(defaultTimeZone).toJavaLocalDate() }
359
+ JavaLocalDate ::class -> convert<Long > { it.toLocalDate(defaultTimeZone).toJavaLocalDate() }
360
+
361
+ JavaLocalTime ::class -> convert<Long > { it.toLocalTime(defaultTimeZone).toJavaLocalTime() }
349
362
350
- LocalTime ::class -> convert<Long > { it.toLocalTime(defaultTimeZone ) }
363
+ JavaInstant ::class -> convert<Long > { JavaInstant .ofEpochMilli(it ) }
351
364
352
365
else -> null
353
366
}
@@ -359,39 +372,45 @@ internal fun createConverter(from: KType, to: KType, options: ParserOptions? = n
359
372
360
373
LocalDate ::class -> convert<Instant > { it.toLocalDate(defaultTimeZone) }
361
374
362
- java.time.LocalDateTime ::class -> convert<Instant > {
375
+ LocalTime ::class -> convert<Instant > { it.toLocalTime(defaultTimeZone) }
376
+
377
+ JavaLocalDateTime ::class -> convert<Instant > {
363
378
it.toLocalDateTime(defaultTimeZone).toJavaLocalDateTime()
364
379
}
365
380
366
- java.time. LocalDate ::class -> convert<Instant > { it.toLocalDate(defaultTimeZone).toJavaLocalDate() }
381
+ JavaLocalDate ::class -> convert<Instant > { it.toLocalDate(defaultTimeZone).toJavaLocalDate() }
367
382
368
- java.time. Instant ::class -> convert<Instant > { it.toJavaInstant() }
383
+ JavaInstant ::class -> convert<Instant > { it.toJavaInstant() }
369
384
370
- LocalTime ::class -> convert<Instant > { it.toLocalTime(defaultTimeZone) }
385
+ JavaLocalTime ::class -> convert<Instant > { it.toLocalTime(defaultTimeZone).toJavaLocalTime( ) }
371
386
372
387
else -> null
373
388
}
374
389
375
- java.time. Instant ::class -> when (toClass) {
376
- Long ::class -> convert< java.time. Instant > { it.toEpochMilli() }
390
+ JavaInstant ::class -> when (toClass) {
391
+ Long ::class -> convert<JavaInstant > { it.toEpochMilli() }
377
392
378
- LocalDateTime ::class -> convert< java.time. Instant > {
393
+ LocalDateTime ::class -> convert<JavaInstant > {
379
394
it.toKotlinInstant().toLocalDateTime(defaultTimeZone)
380
395
}
381
396
382
- LocalDate ::class -> convert< java.time. Instant > { it.toKotlinInstant().toLocalDate(defaultTimeZone) }
397
+ LocalDate ::class -> convert<JavaInstant > { it.toKotlinInstant().toLocalDate(defaultTimeZone) }
383
398
384
- java.time.LocalDateTime ::class -> convert< java.time.Instant > {
399
+ LocalTime ::class -> convert<JavaInstant > { it.toKotlinInstant().toLocalTime(defaultTimeZone) }
400
+
401
+ Instant ::class -> convert<JavaInstant > { it.toKotlinInstant() }
402
+
403
+ JavaLocalDateTime ::class -> convert<JavaInstant > {
385
404
it.toKotlinInstant().toLocalDateTime(defaultTimeZone).toJavaLocalDateTime()
386
405
}
387
406
388
- java.time. LocalDate ::class -> convert< java.time. Instant > {
407
+ JavaLocalDate ::class -> convert<JavaInstant > {
389
408
it.toKotlinInstant().toLocalDate(defaultTimeZone).toJavaLocalDate()
390
409
}
391
410
392
- Instant ::class -> convert< java.time. Instant > { it.toKotlinInstant() }
393
-
394
- LocalTime :: class -> convert < java.time. Instant > { it.toKotlinInstant().toLocalTime(defaultTimeZone) }
411
+ JavaLocalTime ::class -> convert<JavaInstant > {
412
+ it.toKotlinInstant().toLocalTime(defaultTimeZone).toJavaLocalTime()
413
+ }
395
414
396
415
else -> null
397
416
}
@@ -417,30 +436,38 @@ internal fun createConverter(from: KType, to: KType, options: ParserOptions? = n
417
436
418
437
LocalDateTime ::class -> when (toClass) {
419
438
LocalDate ::class -> convert<LocalDateTime > { it.date }
439
+ LocalTime ::class -> convert<LocalDateTime > { it.time }
420
440
Instant ::class -> convert<LocalDateTime > { it.toInstant(defaultTimeZone) }
421
441
Long ::class -> convert<LocalDateTime > { it.toInstant(defaultTimeZone).toEpochMilliseconds() }
422
- java.time.LocalDateTime ::class -> convert<LocalDateTime > { it.toJavaLocalDateTime() }
423
- java.time.LocalDate ::class -> convert<LocalDateTime > { it.date.toJavaLocalDate() }
424
- java.time.LocalTime ::class -> convert<LocalDateTime > { it.toJavaLocalDateTime().toLocalTime() }
442
+ JavaLocalDateTime ::class -> convert<LocalDateTime > { it.toJavaLocalDateTime() }
443
+ JavaLocalDate ::class -> convert<LocalDateTime > { it.date.toJavaLocalDate() }
444
+ JavaLocalTime ::class -> convert<LocalDateTime > { it.toJavaLocalDateTime().toLocalTime() }
445
+ JavaInstant ::class -> convert<LocalDateTime > { it.toInstant(defaultTimeZone).toJavaInstant() }
425
446
else -> null
426
447
}
427
448
428
- java.time.LocalDateTime ::class -> when (toClass) {
429
- LocalDate ::class -> convert< java.time.LocalDateTime > { it.toKotlinLocalDateTime().date }
449
+ JavaLocalDateTime ::class -> when (toClass) {
450
+ LocalDate ::class -> convert<JavaLocalDateTime > { it.toKotlinLocalDateTime().date }
451
+
452
+ LocalTime ::class -> convert<JavaLocalDateTime > { it.toKotlinLocalDateTime().time }
430
453
431
- LocalDateTime ::class -> convert< java.time. LocalDateTime > { it.toKotlinLocalDateTime() }
454
+ LocalDateTime ::class -> convert<JavaLocalDateTime > { it.toKotlinLocalDateTime() }
432
455
433
- Instant ::class -> convert< java.time. LocalDateTime > {
456
+ Instant ::class -> convert<JavaLocalDateTime > {
434
457
it.toKotlinLocalDateTime().toInstant(defaultTimeZone)
435
458
}
436
459
437
- Long ::class -> convert< java.time. LocalDateTime > {
460
+ Long ::class -> convert<JavaLocalDateTime > {
438
461
it.toKotlinLocalDateTime().toInstant(defaultTimeZone).toEpochMilliseconds()
439
462
}
440
463
441
- java.time. LocalDate ::class -> convert< java.time. LocalDateTime > { it.toLocalDate() }
464
+ JavaLocalDate ::class -> convert<JavaLocalDateTime > { it.toLocalDate() }
442
465
443
- java.time.LocalTime ::class -> convert< java.time.LocalDateTime > { it.toLocalTime() }
466
+ JavaLocalTime ::class -> convert<JavaLocalDateTime > { it.toLocalTime() }
467
+
468
+ JavaInstant ::class -> convert<JavaLocalDateTime > {
469
+ it.toKotlinLocalDateTime().toInstant(defaultTimeZone).toJavaInstant()
470
+ }
444
471
445
472
else -> null
446
473
}
@@ -449,25 +476,30 @@ internal fun createConverter(from: KType, to: KType, options: ParserOptions? = n
449
476
LocalDateTime ::class -> convert<LocalDate > { it.atTime(0 , 0 ) }
450
477
Instant ::class -> convert<LocalDate > { it.atStartOfDayIn(defaultTimeZone) }
451
478
Long ::class -> convert<LocalDate > { it.atStartOfDayIn(defaultTimeZone).toEpochMilliseconds() }
452
- java.time.LocalDate ::class -> convert<LocalDate > { it.toJavaLocalDate() }
453
- java.time.LocalDateTime ::class -> convert<LocalDate > { it.atTime(0 , 0 ).toJavaLocalDateTime() }
479
+ JavaLocalDate ::class -> convert<LocalDate > { it.toJavaLocalDate() }
480
+ JavaLocalDateTime ::class -> convert<LocalDate > { it.atTime(0 , 0 ).toJavaLocalDateTime() }
481
+ JavaInstant ::class -> convert<LocalDate > { it.atStartOfDayIn(defaultTimeZone).toJavaInstant() }
454
482
else -> null
455
483
}
456
484
457
- java.time. LocalDate ::class -> when (toClass) {
458
- LocalDate ::class -> convert< java.time. LocalDate > { it.toKotlinLocalDate() }
485
+ JavaLocalDate ::class -> when (toClass) {
486
+ LocalDate ::class -> convert<JavaLocalDate > { it.toKotlinLocalDate() }
459
487
460
- LocalDateTime ::class -> convert< java.time. LocalDate > { it.atTime(0 , 0 ).toKotlinLocalDateTime() }
488
+ LocalDateTime ::class -> convert<JavaLocalDate > { it.atTime(0 , 0 ).toKotlinLocalDateTime() }
461
489
462
- Instant ::class -> convert< java.time. LocalDate > {
490
+ Instant ::class -> convert<JavaLocalDate > {
463
491
it.toKotlinLocalDate().atStartOfDayIn(defaultTimeZone)
464
492
}
465
493
466
- Long ::class -> convert< java.time. LocalDate > {
494
+ Long ::class -> convert<JavaLocalDate > {
467
495
it.toKotlinLocalDate().atStartOfDayIn(defaultTimeZone).toEpochMilliseconds()
468
496
}
469
497
470
- java.time.LocalDateTime ::class -> convert< java.time.LocalDate > { it.atStartOfDay() }
498
+ JavaLocalDateTime ::class -> convert<JavaLocalDate > { it.atStartOfDay() }
499
+
500
+ JavaInstant ::class -> convert<JavaLocalDate > {
501
+ it.toKotlinLocalDate().atStartOfDayIn(defaultTimeZone).toJavaInstant()
502
+ }
471
503
472
504
else -> null
473
505
}
@@ -488,12 +520,10 @@ internal fun Long.toLocalDateTime(zone: TimeZone = defaultTimeZone) =
488
520
489
521
internal fun Long.toLocalDate (zone : TimeZone = defaultTimeZone) = toLocalDateTime(zone).date
490
522
491
- internal fun Long.toLocalTime (zone : TimeZone = defaultTimeZone) =
492
- toLocalDateTime(zone).toJavaLocalDateTime().toLocalTime()
523
+ internal fun Long.toLocalTime (zone : TimeZone = defaultTimeZone) = toLocalDateTime(zone).time
493
524
494
525
internal fun Instant.toLocalDate (zone : TimeZone = defaultTimeZone) = toLocalDateTime(zone).date
495
526
496
- internal fun Instant.toLocalTime (zone : TimeZone = defaultTimeZone) =
497
- toLocalDateTime(zone).toJavaLocalDateTime().toLocalTime()
527
+ internal fun Instant.toLocalTime (zone : TimeZone = defaultTimeZone) = toLocalDateTime(zone).time
498
528
499
529
internal val defaultTimeZone = TimeZone .currentSystemDefault()
0 commit comments