Ich schreibe eine Funktion, die eine Timedelta-Eingabe benötigt, um als Zeichenfolge übergeben zu werden. Der Benutzer muss so etwas wie "32m" oder "2h32m" oder sogar "4:13" oder "5hr34m56s" eingeben ... Gibt es eine Bibliothek oder etwas, in dem so etwas bereits implementiert ist?
96
d
Tagen,h
Stunden,m
Minuten unds
Sekunden mit einer Zeile (nach dem Importdatetime
) erstellen möchten :datetime.timedelta(days = d, hours = h, minutes=m, seconds=s)
.Antworten:
Für das erste Format (5hr34m56s) sollten Sie mit regulären Ausdrücken analysieren
Hier ist eine neu basierte Lösung:
quelle
dateutil.parser.parse
timedelta
Objekte werden nicht analysiert . Es gibt a zurückdatetime
und würde eine Ausnahme für Zeichenfolgen wie auslösen'28:32:11.10'
.Für mich ist die eleganteste Lösung, ohne auf externe Bibliotheken wie dateutil zurückgreifen oder die Eingabe manuell analysieren zu müssen, die Verwendung der leistungsstarken
strptime
String-Parsing-Methode von datetime .Danach können Sie Ihr timedelta-Objekt wie gewohnt verwenden, es in Sekunden konvertieren, um sicherzustellen, dass wir das Richtige getan haben usw.
quelle
datetime.strptime("32:20:25","%H:%M:%S")
funktioniert nicht) und Sie das genaue Eingabeformat kennen müssen.timedelta
Parameter manuell anzugeben, ziemlich ärgerlich, aber das Beste, was ich finden kann, um dies zu vermeiden, ist :delta = t - datetime.combine(t.date(), time.min)
, was ... schrecklich ist.Ich hatte gestern ein bisschen Zeit, also entwickelte ich die Antwort von @virhilo zu einem Python-Modul und fügte ein paar weitere Zeitausdrucksformate hinzu, einschließlich aller von @priestc angeforderten .
Der Quellcode ist auf Github (MIT-Lizenz) für alle, die ihn möchten . Es ist auch auf PyPI:
Gibt die Zeit in Sekunden zurück:
quelle
Ich wollte nur eine Zeit eingeben und sie dann zu verschiedenen Daten hinzufügen, damit dies für mich funktionierte:
quelle
dtt.strptime(myduration, "%H:%M:%S") - dtt(1900, 1, 1)
funktioniert auch ...Ich habe die nette Antwort von virhilo mit ein paar Upgrades geändert :
3m0.25s
3 Minuten, 0,25 Sekunden).
quelle
Wenn Sie Python 3 verwenden, ist hier die aktualisierte Version für Hari Shankars Lösung, die ich verwendet habe:
quelle
Django kommt mit der Utility-Funktion
parse_duration()
. Aus der Dokumentation :quelle
Verwenden Sie die Isodatenbibliothek , um die ISO 8601- Dauerzeichenfolge zu analysieren. Beispielsweise:
Siehe auch Gibt es eine einfache Möglichkeit, die Dauer von ISO 8601 in Zeitdelta umzuwandeln?
quelle