Python函数将秒转换为分钟,小时和天

yoy*_*oyo 33 python

问题:编写一个要求用户输入秒数的程序,其工作方式如下:

  • 一分钟内有60秒.如果用户输入的秒数大于或等于60,则程序应显示该秒数的分钟数.

  • 一小时有3600秒.如果用户输入的秒数大于或等于3600,程序应显示该秒数的小时数.

  • 一天有86400秒.如果用户输入的秒数大于或等于86400,则程序应显示该秒数的天数.

到目前为止我所拥有的:

def time():
    sec = int( input ('Enter the number of seconds:'.strip())
    if sec <= 60:
        minutes = sec // 60
        print('The number of minutes is {0:.2f}'.format(minutes)) 
    if sec (<= 3600):
        hours = sec // 3600
        print('The number of minutes is {0:.2f}'.format(hours))
    if sec <= 86400:
        days = sec // 86400
        print('The number of minutes is {0:.2f}'.format(days))
    return
Run Code Online (Sandbox Code Playgroud)

Mr.*_*. B 51

这个花絮可用于显示不同粒度的经过时间.

我个人认为效率问题在这里几乎毫无意义,只要没有完全没有效率的事情.过早的优化是相当多的邪恶的根源.这足够快,它永远不会成为你的瓶颈.

intervals = (
    ('weeks', 604800),  # 60 * 60 * 24 * 7
    ('days', 86400),    # 60 * 60 * 24
    ('hours', 3600),    # 60 * 60
    ('minutes', 60),
    ('seconds', 1),
    )

def display_time(seconds, granularity=2):
    result = []

    for name, count in intervals:
        value = seconds // count
        if value:
            seconds -= value * count
            if value == 1:
                name = name.rstrip('s')
            result.append("{} {}".format(value, name))
    return ', '.join(result[:granularity])
Run Code Online (Sandbox Code Playgroud)

..这提供了不错的输出:

In [52]: display_time(1934815)
Out[52]: '3 weeks, 1 day'

In [53]: display_time(1934815, 4)
Out[53]: '3 weeks, 1 day, 9 hours, 26 minutes'
Run Code Online (Sandbox Code Playgroud)

  • 在我的 Python 2.6.6 系统上,我不得不使用 `result.append("%s %s" % (value, name))` (2认同)

Gar*_*yde 47

这将转换Ñ秒进d天,ħ小时,分钟,和小号秒.

from datetime import datetime, timedelta

def GetTime():
    sec = timedelta(seconds=int(input('Enter the number of seconds: ')))
    d = datetime(1,1,1) + sec

    print("DAYS:HOURS:MIN:SEC")
    print("%d:%d:%d:%d" % (d.day-1, d.hour, d.minute, d.second))
Run Code Online (Sandbox Code Playgroud)

  • 如果持续时间太长以至于更改了月份,那么此提案将无效.尝试5184000(60*24*3600)秒. (4认同)
  • 一天有86400秒,这就是为什么你只能有0-86399秒.换句话说,timedelta(秒= 86400)将解析为天= 1,秒= 0.因此,86399不是秒的最大输入值. (3认同)

Pre*_*rac 7

要将秒(作为字符串)转换为日期时间,这也可能有所帮助.你得到天数和秒数.秒数可以进一步转换为分钟和小时.

from datetime import datetime, timedelta
sec = timedelta(seconds=(input('Enter the number of seconds: ')))
time = str(sec)
Run Code Online (Sandbox Code Playgroud)


Fat*_*ora 7

def seconds_to_dhms(time):
    seconds_to_minute   = 60
    seconds_to_hour     = 60 * seconds_to_minute
    seconds_to_day      = 24 * seconds_to_hour

    days    =   time // seconds_to_day
    time    %=  seconds_to_day

    hours   =   time // seconds_to_hour
    time    %=  seconds_to_hour

    minutes =   time // seconds_to_minute
    time    %=  seconds_to_minute

    seconds = time

    print("%d days, %d hours, %d minutes, %d seconds" % (days, hours, minutes, seconds))


time = int(input("Enter the number of seconds: "))
seconds_to_dhms(time)
Run Code Online (Sandbox Code Playgroud)

输出: 输入秒数:2434234232

结果: 28174 天 0 小时 10 分 32 秒


小智 7

def normalize_seconds(seconds: int) -> tuple:
    (days, remainder) = divmod(seconds, 86400)
    (hours, remainder) = divmod(remainder, 3600)
    (minutes, seconds) = divmod(remainder, 60)

    return namedtuple("_", ("days", "hours", "minutes", "seconds"))(days, hours, minutes, seconds)
Run Code Online (Sandbox Code Playgroud)


Hig*_*ker 5

我不确定是否要这样做,但是我有类似的任务,如果该字段为零,则需要删除该字段。例如,86401秒将显示“ 1天1秒”,而不是“ 1天0小时0分钟1秒”。下面的代码可以做到这一点。

def secondsToText(secs):
    days = secs//86400
    hours = (secs - days*86400)//3600
    minutes = (secs - days*86400 - hours*3600)//60
    seconds = secs - days*86400 - hours*3600 - minutes*60
    result = ("{} days, ".format(days) if days else "") + \
    ("{} hours, ".format(hours) if hours else "") + \
    ("{} minutes, ".format(minutes) if minutes else "") + \
    ("{} seconds, ".format(seconds) if seconds else "")
    return result
Run Code Online (Sandbox Code Playgroud)

编辑:处理单词复数的更好的版本。

def secondsToText(secs):
    days = secs//86400
    hours = (secs - days*86400)//3600
    minutes = (secs - days*86400 - hours*3600)//60
    seconds = secs - days*86400 - hours*3600 - minutes*60
    result = ("{0} day{1}, ".format(days, "s" if days!=1 else "") if days else "") + \
    ("{0} hour{1}, ".format(hours, "s" if hours!=1 else "") if hours else "") + \
    ("{0} minute{1}, ".format(minutes, "s" if minutes!=1 else "") if minutes else "") + \
    ("{0} second{1}, ".format(seconds, "s" if seconds!=1 else "") if seconds else "")
    return result
Run Code Online (Sandbox Code Playgroud)

EDIT2:创建了一种要点,该要点用多种语言来完成


lal*_*lli 1

根据需要以相反的方式减去秒,并且不要将其称为时间;有一个具有该名称的包:

def sec_to_time():
    sec = int( input ('Enter the number of seconds:'.strip()) )

    days = sec / 86400
    sec -= 86400*days

    hrs = sec / 3600
    sec -= 3600*hrs

    mins = sec / 60
    sec -= 60*mins
    print days, ':', hrs, ':', mins, ':', sec
Run Code Online (Sandbox Code Playgroud)

  • 不太满足要求。 (4认同)