здесь есть еще один вопрос, который спрашивает, сколько секунд с полуночи - этот вопрос противоположен.

Как мне получить секунды до конца дня, от текущего времени, используя python?

0
wonton 31 Авг 2017 в 19:19

3 ответа

Лучший ответ

Самый чистый способ сделать это

def time_until_end_of_day(dt=None):
    # type: (datetime.datetime) -> datetime.timedelta
    """
    Get timedelta until end of day on the datetime passed, or current time.
    """
    if dt is None:
        dt = datetime.datetime.now()
    tomorrow = dt + datetime.timedelta(days=1)
    return datetime.datetime.combine(tomorrow, datetime.time.min) - dt

Взято из http: // wontonst. blogspot.com/2017/08/time-until-end-of-day-in-python.html

Это, однако, не самое быстрое решение - вы можете запустить свои собственные вычисления, чтобы ускорить

def time_until_end_of_day(dt=None):
    if df is None:
        dt = datetime.datetime.now()
    return ((24 - dt.hour - 1) * 60 * 60) + ((60 - dt.minute - 1) * 60) + (60 - dt.second)

Результаты:

Низкая: 3.55844402313 Быстрая: 1.74721097946 (ускорение на 103%)

Как отметил Джим Льюис, есть случай, когда эта более быстрая функция отключается при запуске / остановке перехода на летнее время.

6
wonton 31 Авг 2017 в 23:49

Количество секунд до конца дня - это разница между количеством полных секунд дня и секунд, прошедших с начала дня:

import datetime
seconds_in_a_day = 86400  # the number of seconds in one day
dt = datetime.datetime.now()
midnight = datetime.datetime.combine(dt.date(), datetime.time())  # current date with zero time (00:00:00)
seconds_since_midnight = (dt - midnight).seconds  # the number of seconds since the beginning of the day
seconds_until_end_of_day = seconds_in_a_day - seconds_since_midnight  # the number of seconds remaining until the end of the day
0
Lidiya Parshina 17 Окт 2019 в 10:14
from datetime import datetime
from datetime import timedelta

def seconds_until_end_of_today():
    time_delta = datetime.combine(
        datetime.now().date() + timedelta(days=1), datetime.strptime("0000", "%H%M").time()
    ) - datetime.now()
    return time_delta.seconds
0
gaozhidf 15 Окт 2018 в 10:05