2017-08-21 1 views
0

Positive und negative timedeltas unterschiedlich formatieren, wenn sie in einem String in Python Casting:Format eine negative Timedelta als String mit Zeichen und Stunden, Minuten, Sekunden

import datetime 

str(datetime.timedelta(hours=2))  
--> '2:00:00' 

str(datetime.timedelta(hours=-2))  
--> '-1 day, 22:00:00' 

Ich würde lieber mag meine negativen timedeltas wie formatiert habe die positiven aber mit einem Negativitätsindikator, wie in -2:00:00.

Kann dies irgendwie erreicht werden?

edit:

Nach der verknüpften Antwort suchend durch, kam ich mit auf den Punkt:

def timedelta_to_string(timedelta): 
    total_seconds = timedelta.total_seconds() 
    if total_seconds < 0: 
     timedelta_str = '-' + str(datetime.timedelta() - timedelta) 
    else: 
     timedelta_str = str(timedelta) 
    return timedelta_str 

Das gibt:

timedelta_to_string(datetime.timedelta(hours=2)) 
>>> '2:00:00' 

timedelta_to_string(datetime.timedelta(hours=-2)) 
>>> '-2:00:00' 

timedelta_to_string(datetime.timedelta(hours=30)) 
>>>'1 day, 6:00:00' 

timedelta_to_string(datetime.timedelta(hours=-30)) 
>>> '-1 day, 6:00:00' 

Having Tage timedeltas gezeigt wird,> 24 Stunden sind gut für mich. Gibt es einen Randfall, den ich vermisse, der mit diesem Ansatz nicht funktionieren würde?

+2

Mögliches Duplikat [Python Timedelta Problem mit negativen Werten] (https://stackoverflow.com/questions/8408397/python-timedelta-issue-with-negative-values) –

Antwort

1

Ich kann den StackOverflow-Post nicht finden, wo ich ihn gefunden habe, aber es gibt ein lesbares Deltamodul auf Github, das Sie nützlich finden könnten.

https://github.com/wimglenn/readabledelta

+0

Danke, das hilft Menge! Es ist nicht leicht, negative Timedeltas als eine Zeichenfolge ohne Zweideutigkeit auszudrücken, aber der Ansatz dieses Moduls sieht für mich gut aus. – Dirk

+0

Übrigens, [natürlich] (http://natural.readthedocs.io/en/latest/natural/date.html) macht auch einen guten Job, wenn ein "komprimiertes" String-Format (wie in '1w 6d 13h 54m 6s ') ist erwünscht. – Dirk

+0

Ich hatte die gleiche Reaktion auf lesbare Deltas, als ich es das erste Mal sah. Ich habe es seitdem geändert, um ein paar Probleme wie Plural und abgekürzte Einheiten zu überwinden, aber der grundlegende Ansatz ist solide. –

Verwandte Themen