Учитывая объект datetime, как его округлить до следующего появления 8AM PST?Как округлить дату и время до определенного времени?
ответ
Если результат является часовым поясом, известно, объект даты и времени в часовом поясе с нефиксированной UTC смещение, то вы не можете просто позвонить .replace()
или .combine()
- это может создать DateTime с неправильной UTC смещением. Вопрос аналогичен How do I get the UTC time of "midnight" for a given timezone? (00:00
используется вместо 08:00
).
Предполагая, что 8 утра всегда существует и однозначно в PST:
from datetime import datetime, time as datetime_time, timedelta
import pytz # $ pip install pytz
def next_8am_in_pst(aware_dt, tz=pytz.timezone('America/Los_Angeles')):
pst_aware_dt = tz.normalize(aware_dt.astimezone(tz)) # convert to PST
naive_dt = round_up_to_8am(pst_aware_dt.replace(tzinfo=None))
return tz.localize(naive_dt, is_dst=None)
def round_up_to_8am(dt):
rounded = datetime.combine(dt, datetime_time(8))
return rounded + timedelta(rounded < dt)
Пример:
>>> str(next_8am_in_pst(datetime.now(pytz.utc)))
'2016-02-25 08:00:00-08:00'
Спасибо, это работает через переход на летнее время. – camomilk
Я сделал ответ, основанный на некоторые идеи из комментариев:
def nextDay(d):
pstTime = d.astimezone(pytz.timezone('US/Pacific'))
pstTime = pstTime.replace(hour=8, minute=0, second=0, microsecond=0)
if pstTime < d:
pstTime += datetime.timedelta(days=1)
return pstTime
может закончиться с датами с переходом на DST – jfs
Просто проверить, является ли время до или после 8, а затем добавить в день, если это после того, как и построить новый DateTime.
import datetime
def round_datetime(dt):
t = datetime.time(8)
# If time is after 8am, add a day.
if dt.time() > datetime.time(8):
dt += datetime.timedelta(days=1)
return datetime.datetime.combine(dt, t)
- 1. SQL Netezza - Как округлить дату и время до ближайшего дня
- 2. Создать дату до определенного времени?
- 3. время конвертирования Формы штампа на дату и дату до времени
- 4. Как округлить до кратного определенного числа JavaScript?
- 5. Как округлить время до ближайшего дня?
- 6. Oracle PLSQL урезает дату и время до определенного часа
- 7. Изменить дату до определенного формата
- 8. SQL - Как выбрать дату за день до определенного времени?
- 9. Как округлить время?
- 10. Невозможно изменить дату и время от времени() до СЕЙЧАС()
- 11. время отсчета от текущего времени до определенного времени
- 12. C# Читать все строки от определенного времени до определенного времени
- 13. Обновить дату до определенного месяца
- 14. Как получить дату и время до второго?
- 15. Как округлить время до ближайшей четверти и полчаса интервала?
- 16. Показать сообщение до и после определенного времени
- 17. Android: Как округлить дату до 00 следующего часа
- 18. Как округлить до ближайшего 0.5?
- 19. Как округлить время в Postgresql?
- 20. круглый функция в отличном состоянии. как округлить до определенного числа?
- 21. Ограничение времени datetime_select до определенного времени начала
- 22. Как округлить время до ближайшей 15 минут в java
- 23. Как округлить DateTime до ближайшего периода
- 24. Получить дату/время для определенного региона?
- 25. Как получить оставшиеся секунды до определенного времени
- 26. Воспроизведение анимации до определенного времени
- 27. Как округлить метку времени в миллисекундах до ближайших секунд?
- 28. logstash конвертировать время до времени
- 29. Как вычесть время/дату с текущего дня и времени
- 30. Время до начала времени начала
Создайте новый DateTime, используйте вход с текущей датой и время года, месяца, дня и установить часы, мин, секунд как 8, 0, 0 соответственно – Ian
@Ian: Это всегда было бы сегодня 8AM. Чтобы всегда округлить, вам нужно добавить еще один день сверху, если он не был до 8 утра. – jsfan
связанный: [округление до ближайших 30 минут в python] (http://stackoverflow.com/q/32723150/4279) – jfs