1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
use chrono::{NaiveDateTime, NaiveTime, Timelike};
pub(crate) const SECONDS_IN_DAY: i64 = 86_400;
const MILLISECONDS_IN_SECOND: i64 = 1_000;
const MICROSECONDS_IN_SECOND: i64 = 1_000_000;
const NANOSECONDS_IN_SECOND: i64 = 1_000_000_000;
pub(crate) fn date32_as_datetime(v: i32) -> NaiveDateTime {
NaiveDateTime::from_timestamp(v as i64 * SECONDS_IN_DAY, 0)
}
pub(crate) fn date64_as_datetime(v: i64) -> NaiveDateTime {
NaiveDateTime::from_timestamp(
v / MILLISECONDS_IN_SECOND,
(v % MILLISECONDS_IN_SECOND * MICROSECONDS_IN_SECOND) as u32,
)
}
pub fn naive_datetime_to_date64(v: &NaiveDateTime) -> i64 {
v.timestamp_millis()
}
pub fn naive_datetime_to_date32(v: &NaiveDateTime) -> i32 {
(naive_datetime_to_date64(v) / (MILLISECONDS_IN_SECOND * SECONDS_IN_DAY)) as i32
}
pub(crate) fn naive_time_to_time64_nanoseconds(v: &NaiveTime) -> i64 {
v.hour() as i64 * 3600 * NANOSECONDS_IN_SECOND
+ v.minute() as i64 * 60 * NANOSECONDS_IN_SECOND
+ v.second() as i64 * NANOSECONDS_IN_SECOND
+ v.nanosecond() as i64
}
pub(crate) fn time64_nanosecond_as_time(v: i64) -> NaiveTime {
NaiveTime::from_num_seconds_from_midnight(
(v / NANOSECONDS_IN_SECOND) as u32,
(v % NANOSECONDS_IN_SECOND) as u32,
)
}