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