|
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}, |
@@ -189,6 +189,7 @@ impl TryFrom<(&DataType, &str)> for Value { |
189 | 189 |
|
190 | 190 | DataType::Timestamp => Ok(Self::Timestamp( |
191 | 191 | chrono::NaiveDateTime::parse_from_str(v, "%Y-%m-%d %H:%M:%S%.6f")? |
| 192 | + .and_utc() |
192 | 193 | .timestamp_micros(), |
193 | 194 | )), |
194 | 195 | DataType::Date => Ok(Self::Date( |
@@ -525,9 +526,9 @@ impl TryFrom<Value> for NaiveDateTime { |
525 | 526 | Value::Timestamp(i) => { |
526 | 527 | let secs = i / 1_000_000; |
527 | 528 | let nanos = ((i % 1_000_000) * 1000) as u32; |
528 | | - let t = NaiveDateTime::from_timestamp_opt(secs, nanos); |
| 529 | + let t = DateTime::from_timestamp(secs, nanos); |
529 | 530 | match t { |
530 | | - Some(t) => Ok(t), |
| 531 | + Some(t) => Ok(t.naive_utc()), |
531 | 532 | None => Err(ConvertError::new("NaiveDateTime", "".to_string()).into()), |
532 | 533 | } |
533 | 534 | } |
@@ -633,7 +634,8 @@ fn encode_value(f: &mut std::fmt::Formatter<'_>, val: &Value, raw: bool) -> std: |
633 | 634 | Value::Timestamp(i) => { |
634 | 635 | let secs = i / 1_000_000; |
635 | 636 | let nanos = ((i % 1_000_000) * 1000) as u32; |
636 | | - let t = NaiveDateTime::from_timestamp_opt(secs, nanos).unwrap_or_default(); |
| 637 | + let t = DateTime::from_timestamp(secs, nanos).unwrap_or_default(); |
| 638 | + let t = t.naive_utc(); |
637 | 639 | if raw { |
638 | 640 | write!(f, "{}", t) |
639 | 641 | } else { |
|
0 commit comments