@@ -390,31 +390,34 @@ impl ArrowTimestampType for TimestampSecondType {
390
390
const UNIT : TimeUnit = TimeUnit :: Second ;
391
391
392
392
fn make_value ( naive : NaiveDateTime ) -> Option < i64 > {
393
- Some ( naive. timestamp ( ) )
393
+ Some ( naive. and_utc ( ) . timestamp ( ) )
394
394
}
395
395
}
396
396
impl ArrowTimestampType for TimestampMillisecondType {
397
397
const UNIT : TimeUnit = TimeUnit :: Millisecond ;
398
398
399
399
fn make_value ( naive : NaiveDateTime ) -> Option < i64 > {
400
- let millis = naive. timestamp ( ) . checked_mul ( 1_000 ) ?;
401
- millis. checked_add ( naive. timestamp_subsec_millis ( ) as i64 )
400
+ let utc = naive. and_utc ( ) ;
401
+ let millis = utc. timestamp ( ) . checked_mul ( 1_000 ) ?;
402
+ millis. checked_add ( utc. timestamp_subsec_millis ( ) as i64 )
402
403
}
403
404
}
404
405
impl ArrowTimestampType for TimestampMicrosecondType {
405
406
const UNIT : TimeUnit = TimeUnit :: Microsecond ;
406
407
407
408
fn make_value ( naive : NaiveDateTime ) -> Option < i64 > {
408
- let micros = naive. timestamp ( ) . checked_mul ( 1_000_000 ) ?;
409
- micros. checked_add ( naive. timestamp_subsec_micros ( ) as i64 )
409
+ let utc = naive. and_utc ( ) ;
410
+ let micros = utc. timestamp ( ) . checked_mul ( 1_000_000 ) ?;
411
+ micros. checked_add ( utc. timestamp_subsec_micros ( ) as i64 )
410
412
}
411
413
}
412
414
impl ArrowTimestampType for TimestampNanosecondType {
413
415
const UNIT : TimeUnit = TimeUnit :: Nanosecond ;
414
416
415
417
fn make_value ( naive : NaiveDateTime ) -> Option < i64 > {
416
- let nanos = naive. timestamp ( ) . checked_mul ( 1_000_000_000 ) ?;
417
- nanos. checked_add ( naive. timestamp_subsec_nanos ( ) as i64 )
418
+ let utc = naive. and_utc ( ) ;
419
+ let nanos = utc. timestamp ( ) . checked_mul ( 1_000_000_000 ) ?;
420
+ nanos. checked_add ( utc. timestamp_subsec_nanos ( ) as i64 )
418
421
}
419
422
}
420
423
@@ -438,7 +441,7 @@ fn add_day_time<T: ArrowTimestampType>(
438
441
let ( days, ms) = IntervalDayTimeType :: to_parts ( delta) ;
439
442
let res = as_datetime_with_timezone :: < T > ( timestamp, tz) ?;
440
443
let res = add_days_datetime ( res, days) ?;
441
- let res = res. checked_add_signed ( Duration :: milliseconds ( ms as i64 ) ) ?;
444
+ let res = res. checked_add_signed ( Duration :: try_milliseconds ( ms as i64 ) ? ) ?;
442
445
let res = res. naive_utc ( ) ;
443
446
T :: make_value ( res)
444
447
}
@@ -477,7 +480,7 @@ fn subtract_day_time<T: ArrowTimestampType>(
477
480
let ( days, ms) = IntervalDayTimeType :: to_parts ( delta) ;
478
481
let res = as_datetime_with_timezone :: < T > ( timestamp, tz) ?;
479
482
let res = sub_days_datetime ( res, days) ?;
480
- let res = res. checked_sub_signed ( Duration :: milliseconds ( ms as i64 ) ) ?;
483
+ let res = res. checked_sub_signed ( Duration :: try_milliseconds ( ms as i64 ) ? ) ?;
481
484
let res = res. naive_utc ( ) ;
482
485
T :: make_value ( res)
483
486
}
@@ -1001,7 +1004,7 @@ impl Date32Type {
1001
1004
/// * `i` - The Date32Type to convert
1002
1005
pub fn to_naive_date ( i : <Date32Type as ArrowPrimitiveType >:: Native ) -> NaiveDate {
1003
1006
let epoch = NaiveDate :: from_ymd_opt ( 1970 , 1 , 1 ) . unwrap ( ) ;
1004
- epoch. add ( Duration :: days ( i as i64 ) )
1007
+ epoch. add ( Duration :: try_days ( i as i64 ) . unwrap ( ) )
1005
1008
}
1006
1009
1007
1010
/// Converts a chrono::NaiveDate into an arrow Date32Type
@@ -1042,8 +1045,8 @@ impl Date32Type {
1042
1045
) -> <Date32Type as ArrowPrimitiveType >:: Native {
1043
1046
let ( days, ms) = IntervalDayTimeType :: to_parts ( delta) ;
1044
1047
let res = Date32Type :: to_naive_date ( date) ;
1045
- let res = res. add ( Duration :: days ( days as i64 ) ) ;
1046
- let res = res. add ( Duration :: milliseconds ( ms as i64 ) ) ;
1048
+ let res = res. add ( Duration :: try_days ( days as i64 ) . unwrap ( ) ) ;
1049
+ let res = res. add ( Duration :: try_milliseconds ( ms as i64 ) . unwrap ( ) ) ;
1047
1050
Date32Type :: from_naive_date ( res)
1048
1051
}
1049
1052
@@ -1060,7 +1063,7 @@ impl Date32Type {
1060
1063
let ( months, days, nanos) = IntervalMonthDayNanoType :: to_parts ( delta) ;
1061
1064
let res = Date32Type :: to_naive_date ( date) ;
1062
1065
let res = shift_months ( res, months) ;
1063
- let res = res. add ( Duration :: days ( days as i64 ) ) ;
1066
+ let res = res. add ( Duration :: try_days ( days as i64 ) . unwrap ( ) ) ;
1064
1067
let res = res. add ( Duration :: nanoseconds ( nanos) ) ;
1065
1068
Date32Type :: from_naive_date ( res)
1066
1069
}
@@ -1093,8 +1096,8 @@ impl Date32Type {
1093
1096
) -> <Date32Type as ArrowPrimitiveType >:: Native {
1094
1097
let ( days, ms) = IntervalDayTimeType :: to_parts ( delta) ;
1095
1098
let res = Date32Type :: to_naive_date ( date) ;
1096
- let res = res. sub ( Duration :: days ( days as i64 ) ) ;
1097
- let res = res. sub ( Duration :: milliseconds ( ms as i64 ) ) ;
1099
+ let res = res. sub ( Duration :: try_days ( days as i64 ) . unwrap ( ) ) ;
1100
+ let res = res. sub ( Duration :: try_milliseconds ( ms as i64 ) . unwrap ( ) ) ;
1098
1101
Date32Type :: from_naive_date ( res)
1099
1102
}
1100
1103
@@ -1111,7 +1114,7 @@ impl Date32Type {
1111
1114
let ( months, days, nanos) = IntervalMonthDayNanoType :: to_parts ( delta) ;
1112
1115
let res = Date32Type :: to_naive_date ( date) ;
1113
1116
let res = shift_months ( res, -months) ;
1114
- let res = res. sub ( Duration :: days ( days as i64 ) ) ;
1117
+ let res = res. sub ( Duration :: try_days ( days as i64 ) . unwrap ( ) ) ;
1115
1118
let res = res. sub ( Duration :: nanoseconds ( nanos) ) ;
1116
1119
Date32Type :: from_naive_date ( res)
1117
1120
}
@@ -1125,7 +1128,7 @@ impl Date64Type {
1125
1128
/// * `i` - The Date64Type to convert
1126
1129
pub fn to_naive_date ( i : <Date64Type as ArrowPrimitiveType >:: Native ) -> NaiveDate {
1127
1130
let epoch = NaiveDate :: from_ymd_opt ( 1970 , 1 , 1 ) . unwrap ( ) ;
1128
- epoch. add ( Duration :: milliseconds ( i ) )
1131
+ epoch. add ( Duration :: try_milliseconds ( i ) . unwrap ( ) )
1129
1132
}
1130
1133
1131
1134
/// Converts a chrono::NaiveDate into an arrow Date64Type
@@ -1166,8 +1169,8 @@ impl Date64Type {
1166
1169
) -> <Date64Type as ArrowPrimitiveType >:: Native {
1167
1170
let ( days, ms) = IntervalDayTimeType :: to_parts ( delta) ;
1168
1171
let res = Date64Type :: to_naive_date ( date) ;
1169
- let res = res. add ( Duration :: days ( days as i64 ) ) ;
1170
- let res = res. add ( Duration :: milliseconds ( ms as i64 ) ) ;
1172
+ let res = res. add ( Duration :: try_days ( days as i64 ) . unwrap ( ) ) ;
1173
+ let res = res. add ( Duration :: try_milliseconds ( ms as i64 ) . unwrap ( ) ) ;
1171
1174
Date64Type :: from_naive_date ( res)
1172
1175
}
1173
1176
@@ -1184,7 +1187,7 @@ impl Date64Type {
1184
1187
let ( months, days, nanos) = IntervalMonthDayNanoType :: to_parts ( delta) ;
1185
1188
let res = Date64Type :: to_naive_date ( date) ;
1186
1189
let res = shift_months ( res, months) ;
1187
- let res = res. add ( Duration :: days ( days as i64 ) ) ;
1190
+ let res = res. add ( Duration :: try_days ( days as i64 ) . unwrap ( ) ) ;
1188
1191
let res = res. add ( Duration :: nanoseconds ( nanos) ) ;
1189
1192
Date64Type :: from_naive_date ( res)
1190
1193
}
@@ -1217,8 +1220,8 @@ impl Date64Type {
1217
1220
) -> <Date64Type as ArrowPrimitiveType >:: Native {
1218
1221
let ( days, ms) = IntervalDayTimeType :: to_parts ( delta) ;
1219
1222
let res = Date64Type :: to_naive_date ( date) ;
1220
- let res = res. sub ( Duration :: days ( days as i64 ) ) ;
1221
- let res = res. sub ( Duration :: milliseconds ( ms as i64 ) ) ;
1223
+ let res = res. sub ( Duration :: try_days ( days as i64 ) . unwrap ( ) ) ;
1224
+ let res = res. sub ( Duration :: try_milliseconds ( ms as i64 ) . unwrap ( ) ) ;
1222
1225
Date64Type :: from_naive_date ( res)
1223
1226
}
1224
1227
@@ -1235,7 +1238,7 @@ impl Date64Type {
1235
1238
let ( months, days, nanos) = IntervalMonthDayNanoType :: to_parts ( delta) ;
1236
1239
let res = Date64Type :: to_naive_date ( date) ;
1237
1240
let res = shift_months ( res, -months) ;
1238
- let res = res. sub ( Duration :: days ( days as i64 ) ) ;
1241
+ let res = res. sub ( Duration :: try_days ( days as i64 ) . unwrap ( ) ) ;
1239
1242
let res = res. sub ( Duration :: nanoseconds ( nanos) ) ;
1240
1243
Date64Type :: from_naive_date ( res)
1241
1244
}
0 commit comments