|
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