2017-07-04 235 views
0

我在几分钟内有一个大数字列表,我想从这四个分钟,几小时,几天和几个月的列表中进行转换或获取。艾克例如:将分钟列表转换为Python中的分钟,小时,天数和月份列表

Minutes 
21601 
30 
0 
90000 

得到的名单:

Minutes Hours Days Months 
1  0  15 0 
30  0  0  0 
0  0  0  0 
0  12  2  2 

假设将是一个月正好有30天。另外我知道我在这里展示他们作为简单的列,但那些将是列表。
干杯,

回答

1

您可以使用下面这曾经日期格式方法

def format (minutes): 
    year = (int) (minutes/(12*30*24*60)) 
    month = ((int) (minutes/(30*24*60)))%12 
    day = ((int) (minutes/(24*60)))%30 
    hour = ((int) (minutes/(60)))%24 
    min = ((int) (minutes))%60 
    return [min,hour,day,month,year] 

lis = [21601,30,0,90000] 
ans = list(map(lambda x: format(x) , lis)) 
print(ans) 
0

好吧,我发现了一个办法解决,但我不知道这是否是最好的方式,但它似乎工作:

# list_minutes -is a list of minutes 
minutes=[x % 60 for x in list_minutes] 
remeinder1=[x // 60 for x in list_minutes] 
hours=[x % 24 for x in remeinder1] 
remeinder2=[x // 24 for x in remeinder1] 
days=[x % 30 for x in remeinder2] 
month=[x % 30 for x in remeinder2] 

干杯。

+0

确实有更好的方法来做到这一点。如果您有兴趣,请告诉我们。 – TheDarkKnight

+1

@TheDarkKnight是的,我确定在其他回复中看到更好的方式 – Johnny

2

这样做的另一种方法是使用datetime.timedelta。

from datetime import datetime, timedelta 

d = timedelta(minutes=90000) 
print("DAYS:SECONDS") 
print("%d:%d" % (d.days, d.seconds)) 

这给了你:

DAYS:SECONDS 62:43200

您可以随时将其转换成你想要

1

您可以使用timedelta对象和datetime

例子:

from datetime import timedelta, datetime 

def convert_from_minutes(minutes): 
    td = timedelta(minutes=minutes) 
    dt = datetime(1,1,1) 
    result = dt + td 
    return { 
     "days": result.day-1, 
     "hours": result.hour, 
     "minutes": result.minute, 
     "seconds": result.second 
    } 

ans = convert_from_minutes(21601) 
ans["days"]  # gives 15 
ans["hours"] # gives 0 
ans["minutes"] # gives 1 
ans["seconds"] # gives 0 
1

您可以使用内建函数divmod包裹除法/余数业务并入一个:

rem, minutes = zip(*(divmod(x, 60) for x in list_minutes)) 
rem, hours = zip(*(divmod(x, 24) for x in rem)) 
months, days = zip(*(divmod(x, 30) for x in rem)) 

当然,你可以使用datetime.timedelta函数来获取从timedelta你的会议纪要,但是,这仍然需要一些额外的数学运算来获得数月和数小时。

相关问题