Wenn Sie dies in einen einzelnen Wert zum Speichern in einer Datenbank konvertieren möchten, konvertieren Sie diesen einzelnen Wert zurück, um ihn zu formatieren, gehen Sie wie folgt vor:
Außerdem: Was ist, wenn die Dauer mehr als einen Tag überschreitet? Ich möchte es im Tagesformat anzeigen.
– Benutzer1881957
7. Januar ’13 um 5:29
Ein weiteres Problem, da die Stunden und Minuten in einer separaten Variablen gespeichert werden, wie kann ich all diese in eine einzelne Spalte namens Attribut einfügen.
– Benutzer1881957
7. Januar ’13 um 5:33
Wenn Sie Tage drucken möchten, ist es noch einfacher; Mischen Sie sie nur nicht ein. Ich werde die Antwort bearbeiten, um sie zu demonstrieren. Was die zweite Frage angeht, bin ich mir nicht sicher, was du meinst. Welches Format ist attribute soll sein? Meine erste Vermutung ist, dass Sie eigentlich nur eine einzige speichern möchten seconds Nummer in der Datenbank und analysieren Sie sie jedes Mal, wenn Sie sie abrufen; meinst Du das?
– abarnert
7. Januar ’13 um 5:43
Bearbeiten Sie die Frage mit Codes. Ja, ich speichere in Sekundenschnelle in der Datenbank. Dann, während ich dem Benutzer zeige, möchte ich als geeignet in Minuten, Stunden oder Tagen parsen. Danke
– Benutzer1881957
7. Januar ’13 bei 5:51
@ user1881957: Ich bin mir nicht sicher, was Sie mit “Bearbeiten der Frage mit Codes” meinen. Sie haben die Frage nicht bearbeitet. Ich habe die Antwort bereits bearbeitet, um höchstwahrscheinlich alle Konvertierungsfunktionen anzuzeigen, die Sie jemals benötigen werden (und wenn nicht, sollte es einfach sein, Ihre eigenen zu schreiben, indem Sie sie als Anleitung verwenden). Brauchen Sie noch etwas?
– abarnert
7. Januar ’13 um 6:15
EIN datetime.timedelta entspricht dem Unterschied zwischen zwei Daten, kein Datum selbst. Es wird nur in Tagen, Sekunden und Mikrosekunden ausgedrückt, da größere Zeiteinheiten wie Monate und Jahre nicht sauber zerlegt werden (ist 30 Tage 1 Monat oder 0,9677 Monate?).
Wenn Sie a umwandeln möchten timedelta in Stunden und Minuten, können Sie die total_seconds() Methode, um die Gesamtzahl der Sekunden zu erhalten und dann etwas zu rechnen:
x = datetime.timedelta(1, 5, 41038) # Interval of 1 day and 5.41038 seconds
secs = x.total_seconds()
hours = int(secs / 3600)
minutes = int(secs / 60) % 60
AttributeError: ‘datetime.timedelta’ Objekt hat kein Attribut ‘total_seconds’
– Benutzer1881957
7. Januar ’13 um 5:28
@user1881957: total_seconds wurde hinzugefügt in… Ich glaube 2.7 und 3.2. Wenn Sie 2.6 oder 3.1 oder früher verwenden, verwenden Sie das explizite days/seconds Alternative aus meiner Antwort; es ist nicht viel anders.
– abarnert
7. Januar ’13 um 5:42
Es sind keine benutzerdefinierten Hilfsfunktionen erforderlich, wenn wir nur die Zeichenfolge des Formulars drucken müssen [D day[s], ][H]H:MM:SS[.UUUUUU]. Zeitdelta Objektträger str() Operation, die dies tun wird. Es funktioniert sogar in Python 2.6.
Abgesehen von der seltsamen Ausgabeformatanforderung der Frage (die meiner Meinung nach nicht wirklich die eigentliche Anforderung ist, sondern nur das OP hat Probleme, sich auszudrücken), sollte dies die akzeptierte Antwort sein.
– Peter Mortensen
29. Okt ’18 um 23:22
Ich glaube nicht, dass es eine gute Idee ist, sich selbst zu berechnen.
Wenn Sie nur eine hübsche Ausgabe wünschen, konvertieren Sie sie einfach in str mit str() Funktion oder direkt print() es.
Und wenn die Stunden und Minuten weiter verwendet werden, können Sie sie analysieren, um datetime Objektnutzung datetime.strptime()(und extrahiere den Zeitteil mit datetime.time() Methode), zum Beispiel:
Ich habe eine eigene Hilfsfunktion definiert, um das timedelta-Objekt in das ‘HH:MM:SS’-Format zu konvertieren – nur Stunden, Minuten und Sekunden, ohne Stunden in Tage zu ändern.
mögliches Duplikat von Zeitdelta in Tage, Stunden und Minuten umwandeln
– Anto
6. Januar ’14 um 15:18 Uhr
Die Tatsache, dass so viele Leute das nachschlagen, zeigt, dass das Datetime-Modul diese grundlegende Funktion haben sollte …
– theQuestionMan
16. Februar ’21 bei 4:14