2017-07-04 5 views
0

Ich habe eine Liste von großen Zahlen in Minuten, und ich möchte konvertieren oder erhalten Sie aus diesen vier Listen von Minuten, Stunden, Tagen und Monaten. Lke zum Beispiel:Konvertieren Sie eine Liste von Minuten in Listen von Minuten, Stunden, Tagen und Monaten in Python

Minutes 
21601 
30 
0 
90000 

Ergebnislisten:

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

Annahmen wird sein, dass ein Monat genau 30 Tage. Auch ich weiß, dass ich sie hier zur Vereinfachung als Spalten gezeigt habe, aber das werden Listen sein.
Cheers,

Antwort

1

Sie die unten verwenden Methode

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

Ok, ich fand einen Weg, um, obwohl ich nicht tun, wenn dies die schönste Art und Weise ist, aber es scheint zu funktionieren:

# 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] 

Beifall.

+0

gibt es definitiv bessere Möglichkeiten, dies zu tun. Lassen Sie uns wissen, wenn Sie interessiert sind. – TheDarkKnight

+1

@TheDarkKnight Ja sicher, ich sehe auf jeden Fall bessere Wege in anderen Antworten – Johnny

2

Eine andere Möglichkeit wäre, datetime.timedelta zu verwenden.

from datetime import datetime, timedelta 

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

Dies gibt Ihnen:

TAGE: SEKUNDEN 62: 43200

können Sie immer, dass konvertieren Format, in das je Datum möchten Sie

1

Sie könnten ein Objekt timedelta zusammen mit einem datetime verwenden.

Beispiel:

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

Sie können die Abteilung/Rest-Operationen in eine mit der eingebauten Funktion divmod wickeln:

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)) 

Natürlich können Sie die datetime.timedelta Funktion verwenden, um ein Timedelta aus zu bekommen Ihre Minuten erfordern jedoch noch einige zusätzliche Rechenoperationen, um die Monate und Stunden zu bekommen.

Verwandte Themen