Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-time/src/base_utc_offset.rs
6939 views
1
#[cfg(feature = "timezones")]
2
use arrow::legacy::time_zone::Tz;
3
#[cfg(feature = "timezones")]
4
use arrow::temporal_conversions::{
5
timestamp_ms_to_datetime, timestamp_ns_to_datetime, timestamp_us_to_datetime,
6
};
7
#[cfg(feature = "timezones")]
8
use chrono::TimeZone;
9
#[cfg(feature = "timezones")]
10
use chrono_tz::OffsetComponents;
11
#[cfg(feature = "timezones")]
12
use polars_core::prelude::*;
13
#[cfg(feature = "timezones")]
14
pub fn base_utc_offset(
15
ca: &DatetimeChunked,
16
time_unit: &TimeUnit,
17
time_zone: &Tz,
18
) -> DurationChunked {
19
let timestamp_to_datetime = match time_unit {
20
TimeUnit::Nanoseconds => timestamp_ns_to_datetime,
21
TimeUnit::Microseconds => timestamp_us_to_datetime,
22
TimeUnit::Milliseconds => timestamp_ms_to_datetime,
23
};
24
ca.phys
25
.apply_values(|t| {
26
let ndt = timestamp_to_datetime(t);
27
let dt = time_zone.from_utc_datetime(&ndt);
28
dt.offset().base_utc_offset().num_milliseconds()
29
})
30
.into_duration(TimeUnit::Milliseconds)
31
}
32
33