|
3 | 3 | import pathlib |
4 | 4 | from importlib.metadata import version |
5 | 5 |
|
| 6 | +import freezegun |
6 | 7 | import netCDF4 |
7 | 8 | import numpy |
8 | 9 | import numpy.testing |
@@ -569,3 +570,25 @@ def test_wind_dimension_renamed(): |
569 | 570 | ) |
570 | 571 | wound = utils.wind_dimension(data_array, ['y', 'x'], [5, 4], linear_dimension='ix') |
571 | 572 | xarray.testing.assert_equal(wound, expected) |
| 573 | + |
| 574 | + |
| 575 | +@pytest.mark.parametrize('tz_offset', [0, 10, -4]) |
| 576 | +def test_datetime_from_np_time(tz_offset: int): |
| 577 | + # Change the system timezone to `tz_offset` |
| 578 | + with freezegun.freeze_time(tz_offset=tz_offset): |
| 579 | + np_time = numpy.datetime64('2025-08-18T12:05:00.123456') |
| 580 | + |
| 581 | + # Test that converting works using the UTC default timezone, |
| 582 | + # regardless of system timezone |
| 583 | + py_time_utc = utils.datetime_from_np_time(np_time) |
| 584 | + assert py_time_utc == datetime.datetime(2025, 8, 18, 12, 5, 0, 123456, tzinfo=datetime.UTC) |
| 585 | + |
| 586 | + # Test that converting works when interpreted in the system timezone. |
| 587 | + py_tz_system = datetime.timezone(datetime.timedelta(hours=tz_offset)) |
| 588 | + py_time_local = utils.datetime_from_np_time(np_time, tz=py_tz_system) |
| 589 | + assert py_time_local == datetime.datetime(2025, 8, 18, 12, 5, 0, 123456, tzinfo=py_tz_system) |
| 590 | + |
| 591 | + # Test that converting works when using some other arbitrary timezone. |
| 592 | + py_tz_eucla = datetime.timezone(datetime.timedelta(hours=8, minutes=45)) |
| 593 | + py_time_eucla = utils.datetime_from_np_time(np_time, tz=py_tz_eucla) |
| 594 | + assert py_time_eucla == datetime.datetime(2025, 8, 18, 12, 5, 0, 123456, tzinfo=py_tz_eucla) |
0 commit comments