Более простым способом может быть явное построение даты следующим образом:
now = datetime.now()
previous_midnight = datetime.datetime( now.year, now.month, now.day )
Это даст вам метку времени для только что прошедшей полуночи.Как вы уже знаете, time.mktime
даст вам ваше значение эпохи.Просто добавьте или вычтите 24 * 60 * 60, чтобы получить предыдущую или следующую полночь оттуда.
О!И имейте в виду, что эпохальным значением будут секунды с полуночи 1970 года, 1 января UTC .Если вам нужны секунды с полуночи в вашем часовом поясе, не забудьте изменить их соответствующим образом!
Обновление : тестовый код, выполненный из оболочки незадолго до 13:00, PST:
>>> from datetime import datetime
>>> import time
>>> time_now = datetime.now()
>>> time_at_start_of_today_local = datetime( n.year, n.month, n.day )
>>> epochal_time_now = time.mktime( time_now.timetuple() )
>>> epochal_time_at_start_of_today_local = time.mktime( time_at_start_of_today.timetuple() )
>>> hours_since_start_of_day_today = (epochal_time_at_start_of_today_local - epochal_time_now) / 60 / 60
12.975833333333332
Примечание: time_at_start_of_today_local - это количество секунд между 1 января 1970 года, полуночью и началом текущего дня в вашем часовом поясе .Если вы хотите указать количество секунд до начала текущего дня в UTC, то вычтите ваш часовой пояс из time_at_start_of_today_local:
>>> time_at_start_of_today_utc = time_at_start_of_today_local - time.timezone
Имейте в виду, что вы попадаете в странную территорию, особенно, какой день вас волнуетоколо?Если сейчас в вашем часовом поясе вторник, но все еще понедельник в UTC, какую полночь вы считаете сегодняшней полночью для ваших целей?