2017-07-04 28 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你的會議紀要,但是,這仍然需要一些額外的數學運算來獲得數月和數小時。

相關問題