Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中将秒转换为周-天-小时-分钟-秒_Python - Fatal编程技术网

在Python中将秒转换为周-天-小时-分钟-秒

在Python中将秒转换为周-天-小时-分钟-秒,python,Python,我正在尝试为“输入秒数”编写一个Python脚本,并以周、天、小时、分钟和秒为单位获得结果。这是我的答案,但我没有得到正确的答案。我做错了什么 seconds = raw_input("Enter the number of seconds:") seconds = int(seconds) minutes = seconds/60 seconds = seconds % 60 hours = minutes/60 hours = seconds/3600 minutes = minut

我正在尝试为“输入秒数”编写一个Python脚本,并以周、天、小时、分钟和秒为单位获得结果。这是我的答案,但我没有得到正确的答案。我做错了什么

seconds = raw_input("Enter the number of seconds:")
seconds = int(seconds)

minutes = seconds/60

seconds = seconds % 60

hours = minutes/60
hours = seconds/3600

minutes = minutes % 60

days = hours/24
days = minutes/1440
days = seconds/86400

hours = hours % 60
hours = minutes % 60
hours = seconds % 3600

weeks = days/7
weeks = hours/168
weeks = minutes/10080
weeks = seconds/604800

days = days % 1
days = hours % 24
days = minutes % 1440
days = seconds % 86400

weeks = weeks % 1
weeks = days % 7
weeks = hours % 168
weeks = minutes % 10080
weeks = seconds % 604800

print weeks, 'weeks', days, 'days', hours, 'hours', minutes, 'minutes', seconds, 'seconds'

仅从基本转换原则:

weeks = seconds / (7*24*60*60)
days = seconds / (24*60*60) - 7*weeks
hours = seconds / (60*60) - 7*24*weeks - 24*days
minutes = seconds / 60 - 7*24*60*weeks - 24*60*days - 60*hours
seconds = seconds - 7*24*60*60*weeks - 24*60*60*days - 60*60*hours - 60*minutes
做同样的事情时少一点噪音:

weeks = seconds / (7*24*60*60)
seconds -= weeks*7*24*60*60
days = seconds / (24*60*60)
seconds -= days*24*60*60
hours = seconds / (60*60)
seconds -= hours*60*60
minutes = seconds / 60
seconds -= minutes *60

使用
divmod
函数,可以在元组中返回除法结果和余数
(除法,余数)

基本上,此解决方案最接近您的尝试,因为这是
divmod
所做的:

weeks, seconds = divmod(seconds, 7*24*60*60)
相当于

weeks = seconds / (7*24*60*60)
seconds = seconds % (7*24*60*60)
在这里,我们基本上找到了我们时间中的整周数,并保留了这些周被移除后剩下的部分


你也可以从另一端走,让它更漂亮:

minutes, seconds = divmod(seconds, 60)
hours, minutes = divmod(minutes, 60)
days, hours = divmod(hours, 24)
weeks, days = divmod(days, 7)

这背后的想法是,答案中的秒数是除以分钟后的余数;分钟是将所有分钟划分为小时等的剩余时间。。。此版本更好,因为您可以轻松地将其调整为月、年等。

使用Python的datetime时间增量,并支持毫秒或微秒

def humanize_duration(amount, units='s'):
INTERVALS = [(lambda mlsec:divmod(mlsec, 1000), 'ms'),
             (lambda seconds:divmod(seconds, 60), 's'),
             (lambda minutes:divmod(minutes, 60), 'm'),
             (lambda hours:divmod(hours, 24), 'h'),
             (lambda days:divmod(days, 7), 'D'),
             (lambda weeks:divmod(weeks, 4), 'W'),
             (lambda years:divmod(years, 12), 'M'),
             (lambda decades:divmod(decades, 10), 'Y')]

for index_start, (interval, unit) in enumerate(INTERVALS):
    if unit == units:
        break

amount_abrev = []
last_index = 0
amount_temp = amount
for index, (formula, abrev) in enumerate(INTERVALS[index_start: len(INTERVALS)]):
    divmod_result = formula(amount_temp)
    amount_temp = divmod_result[0]
    amount_abrev.append((divmod_result[1], abrev))
    if divmod_result[1] > 0:
        last_index = index
amount_abrev_partial = amount_abrev[0: last_index + 1]
amount_abrev_partial.reverse()

final_string = ''
for amount, abrev in amount_abrev_partial:
    final_string += str(amount) + abrev + ' '
return final_string
import datetime
def convert(sec): 
    td = datetime.timedelta(seconds=sec, microseconds=sec-int(sec)) 
    return td.days/7, (td.days/7)%7, td.seconds/3600, (td.seconds/60)%60, td.seconds%60, td.microseconds, td.microseconds/1000

seconds = 8*24*60*60 + 21627.123  # 8 days, 6 hours (21600 seconds), 27.123 seconds
w, d, h, m, s, us, ms = convert(seconds)
print '{}s / {}w {}d {}h {}m {}s {}us {}ms'.format(seconds,w,d,h,m,s,us,ms)

712827.123s / 1w 1d 6h 0m 27s 123000us 123ms

当使用float和not int进行除法时,即24.0或float(24)和not 24,同样在本上下文中%表示模,在线检查这是什么,您使用的是哪种python版本?@aIKid显然是上一个版本的python 2line@Guy对于他想要计算的,你错了。整数除数正是他应该使用的。例如,80秒给出80/60=1分钟,80%60给出剩余20秒。重复此问题:太快了,谢谢!快速提问(可能是个愚蠢的问题)…为什么不需要%?-是减法符号吗?那么,分钟是秒/60-(减去7*24*60*周)-(减去24*60*天)??同样,非常新。@user3230374:
-
是减法。模运算是通过数学恒等式
x%y==x-(x/y)*y
计算的。就我个人而言,我会使用
%
divmod
,但这并不重要。太棒了,谢谢你的帮助!还有一个问题-=是做什么的?这与a=x-=1等于x=x-1有什么区别;x+=1等于x=x+1。哦,我明白了!再次感谢!为什么毫秒之前还有微秒?@PeterMortensen谢谢你捕捉到这个!因为我的用例时间是以微秒为单位的,所以我在事后加了毫秒。
import datetime
def convert(sec): 
    td = datetime.timedelta(seconds=sec, microseconds=sec-int(sec)) 
    return td.days/7, (td.days/7)%7, td.seconds/3600, (td.seconds/60)%60, td.seconds%60, td.microseconds, td.microseconds/1000

seconds = 8*24*60*60 + 21627.123  # 8 days, 6 hours (21600 seconds), 27.123 seconds
w, d, h, m, s, us, ms = convert(seconds)
print '{}s / {}w {}d {}h {}m {}s {}us {}ms'.format(seconds,w,d,h,m,s,us,ms)

712827.123s / 1w 1d 6h 0m 27s 123000us 123ms