Path: blob/main/crates/polars-python/src/expr/datetime.rs
7889 views
use polars::prelude::*;1use pyo3::prelude::*;23use crate::PyExpr;4use crate::conversion::Wrap;56#[pymethods]7impl PyExpr {8fn dt_add_business_days(9&self,10n: PyExpr,11week_mask: [bool; 7],12holidays: Vec<i32>,13roll: Wrap<Roll>,14) -> Self {15self.inner16.clone()17.dt()18.add_business_days(n.inner, week_mask, holidays, roll.0)19.into()20}2122fn dt_to_string(&self, format: &str) -> Self {23self.inner.clone().dt().to_string(format).into()24}2526fn dt_offset_by(&self, by: PyExpr) -> Self {27self.inner.clone().dt().offset_by(by.inner).into()28}2930fn dt_with_time_unit(&self, time_unit: Wrap<TimeUnit>) -> Self {31self.inner.clone().dt().with_time_unit(time_unit.0).into()32}3334#[cfg(feature = "timezones")]35fn dt_convert_time_zone(&self, time_zone: String) -> PyResult<Self> {36use crate::utils::to_py_err;3738Ok(self39.inner40.clone()41.dt()42.convert_time_zone(43TimeZone::opt_try_new(Some(PlSmallStr::from(time_zone)))44.map_err(to_py_err)?45.unwrap_or(TimeZone::UTC),46)47.into())48}4950fn dt_cast_time_unit(&self, time_unit: Wrap<TimeUnit>) -> Self {51self.inner.clone().dt().cast_time_unit(time_unit.0).into()52}5354#[cfg(feature = "timezones")]55#[pyo3(signature = (time_zone, ambiguous, non_existent))]56fn dt_replace_time_zone(57&self,58time_zone: Option<String>,59ambiguous: Self,60non_existent: Wrap<NonExistent>,61) -> PyResult<Self> {62use crate::utils::to_py_err;6364Ok(self65.inner66.clone()67.dt()68.replace_time_zone(69TimeZone::opt_try_new(time_zone.map(PlSmallStr::from_string)).map_err(to_py_err)?,70ambiguous.inner,71non_existent.0,72)73.into())74}7576fn dt_truncate(&self, every: Self) -> Self {77self.inner.clone().dt().truncate(every.inner).into()78}7980fn dt_month_start(&self) -> Self {81self.inner.clone().dt().month_start().into()82}8384fn dt_month_end(&self) -> Self {85self.inner.clone().dt().month_end().into()86}8788#[cfg(feature = "timezones")]89fn dt_base_utc_offset(&self) -> Self {90self.inner.clone().dt().base_utc_offset().into()91}92#[cfg(feature = "timezones")]93fn dt_dst_offset(&self) -> Self {94self.inner.clone().dt().dst_offset().into()95}9697fn dt_round(&self, every: Self) -> Self {98self.inner.clone().dt().round(every.inner).into()99}100101fn dt_replace(102&self,103year: Self,104month: Self,105day: Self,106hour: Self,107minute: Self,108second: Self,109microsecond: Self,110ambiguous: Self,111) -> Self {112self.inner113.clone()114.dt()115.replace(116year.inner,117month.inner,118day.inner,119hour.inner,120minute.inner,121second.inner,122microsecond.inner,123ambiguous.inner,124)125.into()126}127128fn dt_combine(&self, time: Self, time_unit: Wrap<TimeUnit>) -> Self {129self.inner130.clone()131.dt()132.combine(time.inner, time_unit.0)133.into()134}135fn dt_millennium(&self) -> Self {136self.inner.clone().dt().millennium().into()137}138fn dt_century(&self) -> Self {139self.inner.clone().dt().century().into()140}141fn dt_year(&self) -> Self {142self.inner.clone().dt().year().into()143}144fn dt_is_business_day(&self, week_mask: [bool; 7], holidays: Vec<i32>) -> Self {145self.inner146.clone()147.dt()148.is_business_day(week_mask, holidays)149.into()150}151fn dt_is_leap_year(&self) -> Self {152self.inner.clone().dt().is_leap_year().into()153}154fn dt_iso_year(&self) -> Self {155self.inner.clone().dt().iso_year().into()156}157fn dt_quarter(&self) -> Self {158self.inner.clone().dt().quarter().into()159}160fn dt_month(&self) -> Self {161self.inner.clone().dt().month().into()162}163fn dt_days_in_month(&self) -> Self {164self.inner.clone().dt().days_in_month().into()165}166fn dt_week(&self) -> Self {167self.inner.clone().dt().week().into()168}169fn dt_weekday(&self) -> Self {170self.inner.clone().dt().weekday().into()171}172fn dt_day(&self) -> Self {173self.inner.clone().dt().day().into()174}175fn dt_ordinal_day(&self) -> Self {176self.inner.clone().dt().ordinal_day().into()177}178fn dt_time(&self) -> Self {179self.inner.clone().dt().time().into()180}181fn dt_date(&self) -> Self {182self.inner.clone().dt().date().into()183}184fn dt_datetime(&self) -> Self {185self.inner.clone().dt().datetime().into()186}187fn dt_hour(&self) -> Self {188self.inner.clone().dt().hour().into()189}190fn dt_minute(&self) -> Self {191self.inner.clone().dt().minute().into()192}193fn dt_second(&self) -> Self {194self.inner.clone().dt().second().into()195}196fn dt_millisecond(&self) -> Self {197self.inner.clone().dt().millisecond().into()198}199fn dt_microsecond(&self) -> Self {200self.inner.clone().dt().microsecond().into()201}202fn dt_nanosecond(&self) -> Self {203self.inner.clone().dt().nanosecond().into()204}205fn dt_timestamp(&self, time_unit: Wrap<TimeUnit>) -> Self {206self.inner.clone().dt().timestamp(time_unit.0).into()207}208fn dt_total_days(&self, fractional: bool) -> Self {209self.inner.clone().dt().total_days(fractional).into()210}211fn dt_total_hours(&self, fractional: bool) -> Self {212self.inner.clone().dt().total_hours(fractional).into()213}214fn dt_total_minutes(&self, fractional: bool) -> Self {215self.inner.clone().dt().total_minutes(fractional).into()216}217fn dt_total_seconds(&self, fractional: bool) -> Self {218self.inner.clone().dt().total_seconds(fractional).into()219}220fn dt_total_milliseconds(&self, fractional: bool) -> Self {221self.inner222.clone()223.dt()224.total_milliseconds(fractional)225.into()226}227fn dt_total_microseconds(&self, fractional: bool) -> Self {228self.inner229.clone()230.dt()231.total_microseconds(fractional)232.into()233}234fn dt_total_nanoseconds(&self, fractional: bool) -> Self {235self.inner.clone().dt().total_nanoseconds(fractional).into()236}237}238239240