Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docker/utils/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -405,7 +405,7 @@ def convert_filters(filters):
def datetime_to_timestamp(dt):
"""Convert a datetime to a Unix timestamp"""
delta = dt.astimezone(timezone.utc) - datetime(1970, 1, 1, tzinfo=timezone.utc)
return delta.seconds + delta.days * 24 * 3600
return delta.total_seconds()


def parse_bytes(s):
Expand Down
29 changes: 29 additions & 0 deletions tests/unit/utils_test.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import base64
from datetime import datetime, timezone
import json
import os
import os.path
Expand All @@ -15,6 +16,7 @@
compare_version,
convert_filters,
convert_volume_binds,
datetime_to_timestamp,
decode_json_header,
format_environment,
kwargs_from_env,
Expand Down Expand Up @@ -658,3 +660,30 @@ def test_compare_versions():
assert compare_version('1', '1.0') == 0
assert compare_version('1.10', '1.10.1') == 1
assert compare_version('1.10.0', '1.10') == 0


class DatetimeToTimestampTest(unittest.TestCase):
def test_preserves_microsecond_precision(self):
dt = datetime(2025, 6, 1, 12, 0, 0, 500_000, tzinfo=timezone.utc)
ts = datetime_to_timestamp(dt)
assert isinstance(ts, float)
assert ts == 1748779200.5

def test_whole_second_datetime(self):
dt = datetime(2025, 6, 1, 12, 0, 0, tzinfo=timezone.utc)
ts = datetime_to_timestamp(dt)
assert ts == 1748779200.0

def test_epoch(self):
dt = datetime(1970, 1, 1, tzinfo=timezone.utc)
ts = datetime_to_timestamp(dt)
assert ts == 0.0

def test_naive_datetime(self):
# Naive datetimes are treated as local time via astimezone()
dt = datetime(2025, 6, 1, 12, 0, 0, 500_000)
ts = datetime_to_timestamp(dt)
# Just verify it's a float with sub-second precision preserved
assert isinstance(ts, float)
frac = ts % 1
assert abs(frac - 0.5) < 1e-6