Please, how to convert an int (number a seconds) to these formats: mm:ss or hh:mm:ss ?
I need to do this with Python code (and if possible in a Django template ?).
Thank you very much ;-)
Ale*_*lli 121
我无法相信任何一个答案给出了我认为的"一种明显的方法"(而且我甚至不是荷兰人......! - ) - 最多不到24小时的价值秒(具体为86399秒):
>>> import time
>>> time.strftime('%H:%M:%S', time.gmtime(12345))
'03:25:45'
Run Code Online (Sandbox Code Playgroud)
在Django模板中执行它更加挑剔,因为time
过滤器支持时髦的时间格式化语法(我相信,来自PHP的灵感),还需要datetime模块和时区实现(如pytz)来准备数据.例如:
>>> from django import template as tt
>>> import pytz
>>> import datetime
>>> tt.Template('{{ x|time:"H:i:s" }}').render(
... tt.Context({'x': datetime.datetime.fromtimestamp(12345, pytz.utc)}))
u'03:25:45'
Run Code Online (Sandbox Code Playgroud)
根据您的具体需求,在应用中为此格式化任务定义自定义过滤器可能更方便.
Sil*_*ost 72
>>> a = datetime.timedelta(seconds=65)
datetime.timedelta(0, 65)
>>> str(a)
'0:01:05'
Run Code Online (Sandbox Code Playgroud)
Gle*_*ard 21
通过示例执行所请求的代码,并显示他未指定的案例如何处理:
def format_seconds_to_hhmmss(seconds):
hours = seconds // (60*60)
seconds %= (60*60)
minutes = seconds // 60
seconds %= 60
return "%02i:%02i:%02i" % (hours, minutes, seconds)
def format_seconds_to_mmss(seconds):
minutes = seconds // 60
seconds %= 60
return "%02i:%02i" % (minutes, seconds)
minutes = 60
hours = 60*60
assert format_seconds_to_mmss(7*minutes + 30) == "07:30"
assert format_seconds_to_mmss(15*minutes + 30) == "15:30"
assert format_seconds_to_mmss(1000*minutes + 30) == "1000:30"
assert format_seconds_to_hhmmss(2*hours + 15*minutes + 30) == "02:15:30"
assert format_seconds_to_hhmmss(11*hours + 15*minutes + 30) == "11:15:30"
assert format_seconds_to_hhmmss(99*hours + 15*minutes + 30) == "99:15:30"
assert format_seconds_to_hhmmss(500*hours + 15*minutes + 30) == "500:15:30"
Run Code Online (Sandbox Code Playgroud)
你可以 - 并且可能应该 - 将它存储为timedelta而不是int,但这是一个单独的问题,timedelta实际上并没有使这个特定任务变得更容易.
Mat*_*ell 13
你读过日期时间模块了吗?
编辑/更新: SilentGhost的答案有我的答案遗漏的细节.如果你喜欢这个答案,也可以+1(或者代替).转贴于此处:
>>> a = datetime.timedelta(seconds=65)
datetime.timedelta(0, 65)
>>> str(a)
'0:01:05'
Run Code Online (Sandbox Code Playgroud)
您可以通过简单划分从秒数计算分钟数和小时数:
seconds = 12345
minutes = seconds // 60
hours = minutes // 60
print "%02d:%02d:%02d" % (hours, minutes % 60, seconds % 60)
print "%02d:%02d" % (minutes, seconds % 60)
Run Code Online (Sandbox Code Playgroud)
这//
是蟒蛇整数除法.
如果你使用divmod,你可以免受不同类型的整数除法:
# show time strings for 3800 seconds
# easy way to get mm:ss
print "%02d:%02d" % divmod(3800, 60)
# easy way to get hh:mm:ss
print "%02d:%02d:%02d" % \
reduce(lambda ll,b : divmod(ll[0],b) + ll[1:],
[(3800,),60,60])
# function to convert floating point number of seconds to
# hh:mm:ss.sss
def secondsToStr(t):
return "%02d:%02d:%02d.%03d" % \
reduce(lambda ll,b : divmod(ll[0],b) + ll[1:],
[(t*1000,),1000,60,60])
print secondsToStr(3800.123)
Run Code Online (Sandbox Code Playgroud)
打印:
63:20
01:03:20
01:03:20.123
Run Code Online (Sandbox Code Playgroud)