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