|
14 | 14 | # KIND, either express or implied. See the License for the |
15 | 15 | # specific language governing permissions and limitations |
16 | 16 | # under the License. |
17 | | -from datetime import datetime, timezone, tzinfo |
| 17 | +from datetime import datetime, time, timezone, tzinfo |
18 | 18 |
|
19 | 19 | import pytest |
20 | 20 | import pytz |
21 | 21 |
|
22 | | -from pyiceberg.utils.datetime import datetime_to_millis, millis_to_datetime |
| 22 | +from pyiceberg.utils.datetime import ( |
| 23 | + datetime_to_millis, |
| 24 | + datetime_to_nanos, |
| 25 | + millis_to_datetime, |
| 26 | + time_str_to_nanos, |
| 27 | + time_to_nanos, |
| 28 | + timestamp_to_nanos, |
| 29 | +) |
23 | 30 |
|
24 | 31 | timezones = [ |
25 | 32 | pytz.timezone("Etc/GMT"), |
@@ -71,3 +78,31 @@ def test_datetime_tz_to_millis(tz: tzinfo) -> None: |
71 | 78 |
|
72 | 79 | def test_millis_to_datetime() -> None: |
73 | 80 | assert millis_to_datetime(1690971805918) == datetime(2023, 8, 2, 10, 23, 25, 918000) |
| 81 | + |
| 82 | + |
| 83 | +@pytest.mark.parametrize("time_str, nanos", [("00:00:00Z", 0), ("20:21:44.375612-0500", 73304375612000)]) |
| 84 | +def test_time_str_to_nanos(time_str: str, nanos: int) -> None: |
| 85 | + assert nanos == time_str_to_nanos(time_str) |
| 86 | + |
| 87 | + |
| 88 | +@pytest.mark.parametrize( |
| 89 | + "time_, nanos", [(time(0, 0, 0), 0), (time(20, 21, 44, 375612, tzinfo=pytz.timezone("Etc/GMT-5")), 73304375612000)] |
| 90 | +) |
| 91 | +def test_time_to_nanos(time_: time, nanos: int) -> None: |
| 92 | + assert nanos == time_to_nanos(time_) |
| 93 | + |
| 94 | + |
| 95 | +@pytest.mark.parametrize( |
| 96 | + "datetime_, nanos", |
| 97 | + [ |
| 98 | + (datetime(1970, 1, 1, 0, 0, 0), 0), |
| 99 | + (datetime(2025, 2, 23, 20, 21, 44, 375612, tzinfo=pytz.timezone("Etc/GMT-5")), 1740324104375612000), |
| 100 | + ], |
| 101 | +) |
| 102 | +def test_datetime_to_nanos(datetime_: datetime, nanos: int) -> None: |
| 103 | + assert nanos == datetime_to_nanos(datetime_) |
| 104 | + |
| 105 | + |
| 106 | +@pytest.mark.parametrize("timestamp, nanos", [("1970-01-01T00:00:00", 0), ("2025-02-23T20:21:44.375612", 1740342104375612000)]) |
| 107 | +def test_timestamp_to_nanos(timestamp: str, nanos: int) -> None: |
| 108 | + assert nanos == timestamp_to_nanos(timestamp) |
0 commit comments