Получить случайное время с учетом даты и времени в Python

Я получаю случайное время между двумя датами со следующим кодом

start_date = datetime.datetime(2013, 1, 1, tzinfo=pytz.UTC).toordinal()
end_date = datetime.datetime.now(tz=pytz.utc).toordinal()
return datetime.date.fromordinal(random.randint(start_date, end_date))

Проблема в том, что он не знает часовой пояс.

Я уже пытался сделать это с помощью часового пояса с помощью tzinfo=pytz.UTC как видно из кода выше, но это не работает. Похоже datetime.date.fromordinal() делает его наивным форматом даты и времени.

1 ответ

Если вы используете datetime.datetime вместо datetime.date тогда в вашем коде .replace(tzinfo=pytz.utc) работает на результат.

Для поддержки произвольных шагов (не только 1 day):

#!/usr/bin/env python3
import random
from datetime import datetime, timedelta, timezone

step = timedelta(days=1)
start = datetime(2013, 1, 1, tzinfo=timezone.utc)
end = datetime.now(timezone.utc)
random_date = start + random.randrange((end - start) // step + 1) * step

Примечание: если start использует часовой пояс с нефиксированным смещением utc, а затем вызов tz.normalize() в конце.

Другие вопросы по тегам