秒到python的一天结束

时间:2017-08-31 16:19:22

标签: python datetime

还有另一个问题here询问自午夜以来的秒数 -  这个问题恰恰相反。

如何使用python?

获取从当前时间到当天结束的秒数

4 个答案:

答案 0 :(得分:6)

我发现实现这一目标的最简洁方法是

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)

timeit结果:

  

慢:3.55844402313快:1.74721097946(加速103%)

正如吉姆·刘易斯所指出的那样,有一种情况是,在夏令时开始/停止的那一天,这个更快的功能会中断。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

直到一天结束的秒数是一天中总秒数与从一天开始算起经过的秒数之差:

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

答案 3 :(得分:0)

您可以同时使用 DateTime 和 timedelta 来计算距离午夜还剩多少秒。

from datetime import timedelta, datetime


def seconds_till_midnight(current_time):
    """
    :param current_time: Datetime.datetime 
    :return time till midnight in seconds: 
    """
    # Add 1 day to the current datetime, which will give us some time tomorrow
    # Now set all the time values of tomorrow's datetime value to zero, 
    # which gives us midnight tonight
    midnight = (current_time + timedelta(days=1)).replace(hour=0, minute=0, microsecond=0, second=0)
    # Subtracting 2 datetime values returns a timedelta
    # now we can return the total amount of seconds till midnight
    return (midnight - current_time).seconds


if __name__ == '__main':
    now = datetime.now()
    seconds_left_in_the_day = seconds_till_midnight(now)
    print(seconds_left_in_the_day)