Я строю биллинговую систему в Django, и мне нужно рассчитать период выставления счетов для каждого счета. (00:00:00);
[*] и заканчивается на 25-м текущего месяца в 23:59:59.
Код: Выделить всё
start = datetime(2025, 6, 26, 0, 0, 0)
end = datetime(2025, 7, 25, 23, 59, 59)
Что мы попробовали
Мы попробовали следующую функцию:
tuple[datetime, datetime]:
if reference_date is None:
reference_date = datetime.now()
end = (reference_date - timedelta(days=1)).replace(hour=23, minute=59, second=59, microsecond=0)
start = (reference_date - relativedelta(months=1)).replace(day=26, hour=0, minute=0, second=0, microsecond=0)
return start, end
[/code]
Но это вызывает проблемы с часовым поясом, а DateTime.now () не является временным сейфом в Django. Поэтому, когда мы сохраняем эти значения в базу данных, Django преобразует их в UTC, смещая время (например, +3 часа). < /P>
Мы смотрели: < /p>
- Этот ответ от Mitghi < /li>
и этот вопрос, который был закрыт < /li>
и этот вопрос, который был закрыт < /li> < /br />
и этот вопрос, который был закрыт < /li> < /li>
и этот вопрос, который был закрыт < /br />
и этот вопрос, который был закрыт. Они решают бизнес-логику и хорошо работает с django timezone-ware times. Из предыдущего месяца , в полночь; - Второй-25-й из текущего месяца , в 23:59:59;
- или django's Timezone.now () предпочтительнее).
Код: Выделить всё
pytz.UTC
Подробнее здесь: https://stackoverflow.com/questions/797 ... th-and-the