|
13 | 13 | // limitations under the License. |
14 | 14 |
|
15 | 15 | use arrow::datatypes::{i256, ArrowNativeTypeOp}; |
16 | | -use chrono::{Datelike, NaiveDate, NaiveDateTime}; |
| 16 | +use chrono::{DateTime, Datelike, NaiveDate, NaiveDateTime}; |
17 | 17 |
|
18 | 18 | use crate::{ |
19 | 19 | error::{ConvertError, Error, Result}, |
@@ -190,6 +190,7 @@ impl TryFrom<(&DataType, &str)> for Value { |
190 | 190 |
|
191 | 191 | DataType::Timestamp => Ok(Self::Timestamp( |
192 | 192 | chrono::NaiveDateTime::parse_from_str(v, "%Y-%m-%d %H:%M:%S%.6f")? |
| 193 | + .and_utc() |
193 | 194 | .timestamp_micros(), |
194 | 195 | )), |
195 | 196 | DataType::Date => Ok(Self::Date( |
@@ -527,9 +528,9 @@ impl TryFrom<Value> for NaiveDateTime { |
527 | 528 | Value::Timestamp(i) => { |
528 | 529 | let secs = i / 1_000_000; |
529 | 530 | let nanos = ((i % 1_000_000) * 1000) as u32; |
530 | | - let t = NaiveDateTime::from_timestamp_opt(secs, nanos); |
| 531 | + let t = DateTime::from_timestamp(secs, nanos); |
531 | 532 | match t { |
532 | | - Some(t) => Ok(t), |
| 533 | + Some(t) => Ok(t.naive_utc()), |
533 | 534 | None => Err(ConvertError::new("NaiveDateTime", "".to_string()).into()), |
534 | 535 | } |
535 | 536 | } |
@@ -636,7 +637,8 @@ fn encode_value(f: &mut std::fmt::Formatter<'_>, val: &Value, raw: bool) -> std: |
636 | 637 | Value::Timestamp(i) => { |
637 | 638 | let secs = i / 1_000_000; |
638 | 639 | let nanos = ((i % 1_000_000) * 1000) as u32; |
639 | | - let t = NaiveDateTime::from_timestamp_opt(secs, nanos).unwrap_or_default(); |
| 640 | + let t = DateTime::from_timestamp(secs, nanos).unwrap_or_default(); |
| 641 | + let t = t.naive_utc(); |
640 | 642 | if raw { |
641 | 643 | write!(f, "{}", t) |
642 | 644 | } else { |
|
0 commit comments