4242
4343if TYPE_CHECKING :
4444 from datafusion .context import SessionContext
45-
4645__all__ = [
4746 "abs" ,
4847 "acos" ,
268267 "sum" ,
269268 "tan" ,
270269 "tanh" ,
270+ "to_char" ,
271+ "to_date" ,
271272 "to_hex" ,
273+ "to_local_time" ,
274+ "to_time" ,
272275 "to_timestamp" ,
273276 "to_timestamp_micros" ,
274277 "to_timestamp_millis" ,
@@ -1010,17 +1013,69 @@ def now() -> Expr:
10101013 return Expr (f .now ())
10111014
10121015
1016+ def to_char (arg : Expr , format : Expr ) -> Expr :
1017+ """Returns a string representation of a date, time, timestamp or duration.
1018+
1019+ For usage of ``format`` see the rust chrono package ``strftime`` package.
1020+
1021+ [Documentation here.](https://docs.rs/chrono/latest/chrono/format/strftime/index.html)
1022+ """
1023+ return Expr (f .to_char (arg .expr , format .expr ))
1024+
1025+
1026+ def to_date (arg : Expr , * formatters : Expr ) -> Expr :
1027+ """Converts a value to a date (YYYY-MM-DD).
1028+
1029+ Supports strings, numeric and timestamp types as input.
1030+ Integers and doubles are interpreted as days since the unix epoch.
1031+ Strings are parsed as YYYY-MM-DD (e.g. '2023-07-20')
1032+ if ``formatters`` are not provided.
1033+
1034+ For usage of ``formatters`` see the rust chrono package ``strftime`` package.
1035+
1036+ [Documentation here.](https://docs.rs/chrono/latest/chrono/format/strftime/index.html)
1037+ """
1038+ if not formatters :
1039+ return Expr (f .to_date (arg .expr ))
1040+ formatters = [fmt .expr for fmt in formatters ]
1041+ return Expr (f .to_date (arg .expr , * formatters ))
1042+
1043+
1044+ def to_local_time (arg : Expr ) -> Expr :
1045+ """Converts a timestamp with a timezone to a timestamp without a timezone.
1046+
1047+ This function handles daylight saving time changes.
1048+ """
1049+ return Expr (f .to_local_time (arg .expr ))
1050+
1051+
1052+ def to_time (arg : Expr , * formatters : Expr ) -> Expr :
1053+ """Converts a value to a time. Supports strings and timestamps as input.
1054+
1055+ If ``formatters`` is not provided strings are parsed as HH:MM:SS, HH:MM or
1056+ HH:MM:SS.nnnnnnnnn;
1057+
1058+ For usage of ``formatters`` see the rust chrono package ``strftime`` package.
1059+
1060+ [Documentation here.](https://docs.rs/chrono/latest/chrono/format/strftime/index.html)
1061+ """
1062+ if not formatters :
1063+ return Expr (f .to_time (arg .expr ))
1064+ formatters = [fmt .expr for fmt in formatters ]
1065+ return Expr (f .to_time (arg .expr , * formatters ))
1066+
1067+
10131068def to_timestamp (arg : Expr , * formatters : Expr ) -> Expr :
10141069 """Converts a string and optional formats to a ``Timestamp`` in nanoseconds.
10151070
10161071 For usage of ``formatters`` see the rust chrono package ``strftime`` package.
10171072
10181073 [Documentation here.](https://docs.rs/chrono/latest/chrono/format/strftime/index.html)
10191074 """
1020- if formatters is None :
1021- return f .to_timestamp (arg .expr )
1075+ if not formatters :
1076+ return Expr ( f .to_timestamp (arg .expr ) )
10221077
1023- formatters = [f .expr for f in formatters ]
1078+ formatters = [fmt .expr for fmt in formatters ]
10241079 return Expr (f .to_timestamp (arg .expr , * formatters ))
10251080
10261081
@@ -1029,7 +1084,7 @@ def to_timestamp_millis(arg: Expr, *formatters: Expr) -> Expr:
10291084
10301085 See :py:func:`to_timestamp` for a description on how to use formatters.
10311086 """
1032- formatters = [f .expr for f in formatters ]
1087+ formatters = [fmt .expr for fmt in formatters ]
10331088 return Expr (f .to_timestamp_millis (arg .expr , * formatters ))
10341089
10351090
@@ -1038,7 +1093,7 @@ def to_timestamp_micros(arg: Expr, *formatters: Expr) -> Expr:
10381093
10391094 See :py:func:`to_timestamp` for a description on how to use formatters.
10401095 """
1041- formatters = [f .expr for f in formatters ]
1096+ formatters = [fmt .expr for fmt in formatters ]
10421097 return Expr (f .to_timestamp_micros (arg .expr , * formatters ))
10431098
10441099
@@ -1047,7 +1102,7 @@ def to_timestamp_nanos(arg: Expr, *formatters: Expr) -> Expr:
10471102
10481103 See :py:func:`to_timestamp` for a description on how to use formatters.
10491104 """
1050- formatters = [f .expr for f in formatters ]
1105+ formatters = [fmt .expr for fmt in formatters ]
10511106 return Expr (f .to_timestamp_nanos (arg .expr , * formatters ))
10521107
10531108
@@ -1056,13 +1111,13 @@ def to_timestamp_seconds(arg: Expr, *formatters: Expr) -> Expr:
10561111
10571112 See :py:func:`to_timestamp` for a description on how to use formatters.
10581113 """
1059- formatters = [f .expr for f in formatters ]
1114+ formatters = [fmt .expr for fmt in formatters ]
10601115 return Expr (f .to_timestamp_seconds (arg .expr , * formatters ))
10611116
10621117
10631118def to_unixtime (string : Expr , * format_arguments : Expr ) -> Expr :
10641119 """Converts a string and optional formats to a Unixtime."""
1065- args = [f .expr for f in format_arguments ]
1120+ args = [fmt .expr for fmt in format_arguments ]
10661121 return Expr (f .to_unixtime (string .expr , * args ))
10671122
10681123
@@ -1071,6 +1126,9 @@ def current_date() -> Expr:
10711126 return Expr (f .current_date ())
10721127
10731128
1129+ today = current_date
1130+
1131+
10741132def current_time () -> Expr :
10751133 """Returns current UTC time as a Time64 value."""
10761134 return Expr (f .current_time ())
0 commit comments