diff --git a/src/pendulum/tz/local_timezone.py b/src/pendulum/tz/local_timezone.py index 9418b05d..ec184ead 100644 --- a/src/pendulum/tz/local_timezone.py +++ b/src/pendulum/tz/local_timezone.py @@ -150,6 +150,9 @@ def _get_windows_timezone() -> Timezone: def _get_darwin_timezone() -> Timezone: + if tzenv := os.environ.get("TZ"): + with contextlib.suppress(ValueError): + return _tz_from_env(tzenv) # link will be something like /usr/share/zoneinfo/America/Los_Angeles. link = os.readlink("/etc/localtime") tzname = link[link.rfind("zoneinfo/") + 9 :] diff --git a/tests/tz/test_local_timezone.py b/tests/tz/test_local_timezone.py index b8eff6de..c37ed922 100644 --- a/tests/tz/test_local_timezone.py +++ b/tests/tz/test_local_timezone.py @@ -7,6 +7,8 @@ from pendulum.tz.local_timezone import _get_unix_timezone from pendulum.tz.local_timezone import _get_windows_timezone +from pendulum.tz.local_timezone import get_local_timezone +from pendulum.tz.timezone import Timezone @pytest.mark.skipif( @@ -50,3 +52,15 @@ def test_unix_etc_timezone_dir(): tz = _get_unix_timezone(_root=root_path) assert tz.name == "Europe/Paris" + + +@pytest.mark.skipif( + sys.platform == "win32", reason="Test only available for UNIX systems" +) +def test_unix_respects_TZ_env_var(monkeypatch): # noqa: N802 + monkeypatch.setattr("pendulum.tz.local_timezone._local_timezone", None) + monkeypatch.setenv("TZ", "Europe/Paris") + + tz = get_local_timezone() + + assert tz == Timezone("Europe/Paris")