MCPcopy Create free account
hub / github.com/apache/arrow / test_strftime

Function test_strftime

python/pyarrow/tests/test_compute.py:2533–2611  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

2531@pytest.mark.pandas
2532@pytest.mark.timezone_data
2533def test_strftime():
2534 times = ["2018-03-10 09:00", "2038-01-31 12:23", None]
2535 timezones = ["CET", "UTC", "Europe/Ljubljana"]
2536
2537 formats = ["%a", "%A", "%w", "%d", "%b", "%B", "%m", "%y", "%Y", "%H", "%I",
2538 "%p", "%M", "%z", "%Z", "%j", "%U", "%W", "%%", "%G", "%V", "%u"]
2539 if sys.platform != "win32":
2540 # Locale-dependent formats don't match on Windows
2541 formats.extend(["%c", "%x", "%X"])
2542
2543 for timezone in timezones:
2544 ts = pd.to_datetime(times).tz_localize(timezone)
2545 for unit in ["s", "ms", "us", "ns"]:
2546 tsa = pa.array(ts, type=pa.timestamp(unit, timezone))
2547 for fmt in formats:
2548 options = pc.StrftimeOptions(fmt)
2549 result = pc.strftime(tsa, options=options)
2550 # cast to the same type as result to ignore string vs large_string
2551 expected = pa.array(ts.strftime(fmt)).cast(result.type)
2552 if sys.platform == "win32" and fmt == "%Z":
2553 _compare_strftime_strings_on_windows(result, expected)
2554 else:
2555 assert result.equals(expected)
2556
2557 fmt = "%Y-%m-%dT%H:%M:%S"
2558
2559 # Default format
2560 tsa = pa.array(ts, type=pa.timestamp("s", timezone))
2561 result = pc.strftime(tsa, options=pc.StrftimeOptions())
2562 expected = pa.array(ts.strftime(fmt)).cast(result.type)
2563 assert result.equals(expected)
2564
2565 # Default format plus timezone
2566 tsa = pa.array(ts, type=pa.timestamp("s", timezone))
2567 result = pc.strftime(tsa, options=pc.StrftimeOptions(fmt + "%Z"))
2568 expected = pa.array(ts.strftime(fmt + "%Z")).cast(result.type)
2569 if sys.platform == "win32":
2570 _compare_strftime_strings_on_windows(result, expected)
2571 else:
2572 assert result.equals(expected)
2573
2574 # Pandas %S is equivalent to %S in arrow for unit="s"
2575 tsa = pa.array(ts, type=pa.timestamp("s", timezone))
2576 options = pc.StrftimeOptions("%S")
2577 result = pc.strftime(tsa, options=options)
2578 expected = pa.array(ts.strftime("%S")).cast(result.type)
2579 assert result.equals(expected)
2580
2581 # Pandas %S.%f is equivalent to %S in arrow for unit="us"
2582 tsa = pa.array(ts, type=pa.timestamp("us", timezone))
2583 options = pc.StrftimeOptions("%S")
2584 result = pc.strftime(tsa, options=options)
2585 expected = pa.array(ts.strftime("%S.%f")).cast(result.type)
2586 assert result.equals(expected)
2587
2588 # Test setting locale
2589 tsa = pa.array(ts, type=pa.timestamp("s", timezone))
2590 options = pc.StrftimeOptions(fmt, locale="C")

Callers

nothing calls this directly

Calls 7

extendMethod · 0.80
to_datetimeMethod · 0.80
StrftimeOptionsMethod · 0.80
equalsMethod · 0.80
arrayMethod · 0.45
castMethod · 0.45

Tested by

no test coverage detected