Skip to content

Commit 260ea69

Browse files
committed
fix for date format
1 parent 7245e0f commit 260ea69

File tree

2 files changed

+21
-5
lines changed

2 files changed

+21
-5
lines changed

narwhals/_arrow/utils.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -338,11 +338,11 @@ def convert_str_slice_to_int_slice(
338338

339339

340340
# Regex for date, time, separator and timezone components
341-
DATE_RE = r"^(?P<date>\d{1,4}[-/.]\d{1,2}[-/.]\d{1,4})?"
342-
SEP_RE = r"(?P<sep>\s|T)?"
343-
TIME_RE = r"(?P<time>\d{2}:\d{2}:\d{2})?" # \s*(?P<period>[AP]M)?)?
344-
TZ_RE = r"(?P<tz>Z|[+-]\d{2}:?\d{2})?$" # Matches 'Z', '+02:00', '+0200', '+02', etc.
345-
FULL_RE = DATE_RE + SEP_RE + TIME_RE + TZ_RE
341+
DATE_RE = r"(?P<date>\d{1,4}[-/.]\d{1,2}[-/.]\d{1,4})"
342+
SEP_RE = r"(?P<sep>\s|T)"
343+
TIME_RE = r"(?P<time>\d{2}:\d{2}:\d{2})" # \s*(?P<period>[AP]M)?)?
344+
TZ_RE = r"(?P<tz>Z|[+-]\d{2}:?\d{2})" # Matches 'Z', '+02:00', '+0200', '+02', etc.
345+
FULL_RE = rf"{DATE_RE}{SEP_RE}?{TIME_RE}?{TZ_RE}?$"
346346

347347
# Separate regexes for different date formats
348348
YMD_RE = r"^(?P<year>(?:[12][0-9])?[0-9]{2})(?P<sep1>[-/.])(?P<month>0[1-9]|1[0-2])(?P<sep2>[-/.])(?P<day>0[1-9]|[12][0-9]|3[01])$"

tests/expr_and_series/str/to_datetime_test.py

+16
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,22 @@ def test_to_datetime_series_infer_fmt(constructor_eager: ConstructorEager) -> No
7373
assert str(result) == expected
7474

7575

76+
def test_to_datetime_infer_fmt_from_date(constructor: Constructor) -> None:
77+
data = {"z": ["2020-01-01", "2020-01-02"]}
78+
if "cudf" in str(constructor): # pragma: no cover
79+
expected = "2020-01-01T00:00:00.000000000"
80+
else:
81+
expected = "2020-01-01 00:00:00"
82+
result = (
83+
nw.from_native(constructor(data))
84+
.lazy()
85+
.select(y=nw.col("z").str.to_datetime())
86+
.collect()
87+
.item(row=0, column="y")
88+
)
89+
assert str(result) == expected
90+
91+
7692
@pytest.mark.parametrize("data", [["2024-01-01", "abc"], ["2024-01-01", None]])
7793
def test_pyarrow_infer_datetime_raise_invalid(data: list[str | None]) -> None:
7894
with pytest.raises(

0 commit comments

Comments
 (0)