numeric_range doesn’t quite support datetime:
from datetime import datetime, timedelta, UTC
from pprint import pprint
import zoneinfo
from more_itertools import numeric_range
AMS = zoneinfo.ZoneInfo("Europe/Amsterdam")
pprint([
t.astimezone(UTC)
for t in numeric_range(
datetime(2000, 3, 26, 1, tzinfo=AMS),
datetime(2000, 3, 26, 4, tzinfo=AMS),
timedelta(minutes=30),
)
])
print()
pprint([
t.astimezone(UTC)
for t in numeric_range(
datetime(2000, 10, 29, 1, tzinfo=AMS),
datetime(2000, 10, 29, 4, tzinfo=AMS),
timedelta(minutes=30),
)
])
outputs:
[datetime.datetime(2000, 3, 26, 0, 0, tzinfo=datetime.timezone.utc),
datetime.datetime(2000, 3, 26, 0, 30, tzinfo=datetime.timezone.utc),
datetime.datetime(2000, 3, 26, 1, 0, tzinfo=datetime.timezone.utc),
datetime.datetime(2000, 3, 26, 1, 30, tzinfo=datetime.timezone.utc),
datetime.datetime(2000, 3, 26, 1, 0, tzinfo=datetime.timezone.utc),
datetime.datetime(2000, 3, 26, 1, 30, tzinfo=datetime.timezone.utc)]
[datetime.datetime(2000, 10, 28, 23, 0, tzinfo=datetime.timezone.utc),
datetime.datetime(2000, 10, 28, 23, 30, tzinfo=datetime.timezone.utc),
datetime.datetime(2000, 10, 29, 0, 0, tzinfo=datetime.timezone.utc),
datetime.datetime(2000, 10, 29, 0, 30, tzinfo=datetime.timezone.utc),
datetime.datetime(2000, 10, 29, 2, 0, tzinfo=datetime.timezone.utc),
datetime.datetime(2000, 10, 29, 2, 30, tzinfo=datetime.timezone.utc)]
Though I mostly blame datetime for this. Why would you even mess up addition of small time-deltas to timezone aware datetimes? 