Ich habe eine Funktion, die Informationen in Sekunden zurückgibt, aber ich muss diese Informationen in Stunden:Minuten:Sekunden speichern.
Gibt es einen einfachen Weg, um die Sekunden in diesem Format in Python umzuwandeln?
Ich habe eine Funktion, die Informationen in Sekunden zurückgibt, aber ich muss diese Informationen in Stunden:Minuten:Sekunden speichern.
Gibt es einen einfachen Weg, um die Sekunden in diesem Format in Python umzuwandeln?
Die folgende Gruppe hat für mich funktioniert.
def sec_to_hours(seconds):
a=str(seconds//3600)
b=str((seconds%3600)//60)
c=str((seconds%3600)%60)
d=["{} Stunden {} Minuten {} Sekunden".format(a, b, c)]
return d
print(sec_to_hours(10000))
# ['2 Stunden 46 Minuten 40 Sekunden']
print(sec_to_hours(60*60*24+105))
# ['24 Stunden 1 Minute 45 Sekunden']
Eine etwas abweichende Antwort, aber vielleicht hilfreich für jemanden
def time_format(seconds: int) -> str:
if seconds is not None:
seconds = int(seconds)
d = seconds // (3600 * 24)
h = seconds // 3600 % 24
m = seconds % 3600 // 60
s = seconds % 3600 % 60
if d > 0:
return '{:02d}T {:02d}S {:02d}m {:02d}s'.format(d, h, m, s)
elif h > 0:
return '{:02d}S {:02d}m {:02d}s'.format(h, m, s)
elif m > 0:
return '{:02d}m {:02d}s'.format(m, s)
elif s > 0:
return '{:02d}s'.format(s)
return '-'
Ergebnis:
print(time_format(25*60*60 + 125))
>>> 01T 01S 02m 05s
print(time_format(17*60*60 + 35))
>>> 17S 00m 35s
print(time_format(3500))
>>> 58m 20s
print(time_format(21))
>>> 21s
Stunden (h) berechnet durch ganzzahlige Division (mit //) von Sekunden durch 3600 (60 Min./h * 60 Sek./Min.)
Minuten (m) berechnet durch ganzzahlige Division der verbleibenden Sekunden (Rest der Stundenberechnung durch %) durch 60 (60 Sek./Min.)
Genauso werden Sekunden (s) durch den Rest der Stunden- und Minutenberechnung ermittelt.
Der Rest ist nur noch die Zeichenkettenformatierung!
def hms(seconds):
h = seconds // 3600
m = seconds % 3600 // 60
s = seconds % 3600 % 60
return '{:02d}:{:02d}:{:02d}'.format(h, m, s)
print(hms(7500)) # Sollte 02h05m00s ausgeben
Während dieser Code möglicherweise eine Lösung für die Frage des OPs bietet, ist es besser, Kontext hinzuzufügen, um zu erklären, warum/wie es funktioniert. Dies kann zukünftigen Benutzern helfen, zu lernen und dieses Wissen auf ihren eigenen Code anzuwenden. Sie erhalten wahrscheinlich auch positives Feedback von Benutzern in Form von Upvotes, wenn der Code erklärt wird.
Das ist wie ich es bekommen habe.
def sec2time(sec, n_msec=3):
''' Sekunden in 'D Tage, HH:MM:SS.FFF' umwandeln '''
if hasattr(sec,'__len__'):
return [sec2time(s) for s in sec]
m, s = divmod(sec, 60)
h, m = divmod(m, 60)
d, h = divmod(h, 24)
if n_msec > 0:
pattern = '%%02d:%%02d:%%0%d.%df' % (n_msec+3, n_msec)
else:
pattern = r'%02d:%02d:%02d'
if d == 0:
return pattern % (h, m, s)
return ('%d Tage, ' + pattern) % (d, h, m, s)
Einige Beispiele:
$ sec2time(10, 3)
Ergebnis: '00:00:10.000'
$ sec2time(1234567.8910, 0)
Ergebnis: '14 Tage, 06:56:07'
$ sec2time(1234567.8910, 4)
Ergebnis: '14 Tage, 06:56:07.8910'
$ sec2time([12, 345678.9], 3)
Ergebnis: ['00:00:12.000', '4 Tage, 00:01:18.900']
Wenn Sie den Wert datetime.time
benötigen, können Sie diesen Trick verwenden:
my_time = (datetime(1970,1,1) + timedelta(seconds=my_seconds)).time()
Sie können kein timedelta
zu time
hinzufügen, aber können es zu datetime
hinzufügen.
UPD: Eine weitere Variation der gleichen Technik:
my_time = (datetime.fromordinal(1) + timedelta(seconds=my_seconds)).time()
Anstelle von 1
können Sie jede Zahl größer als 0 verwenden. Hier verwenden wir die Tatsache, dass datetime.fromordinal
immer ein datetime
-Objekt mit einem time
-Bestandteil von null zurückgibt.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
31 Stimmen
Das Inverse dieses Problems kann unter Wie kann man einen H:MM:SS Zeit-String in Sekunden in Python umwandeln? gefunden werden.