2012-04-02 5 views
2

Ich frage mich, wie man Datetime und Time Delta Objekte manipuliert. Ich schreibe ein Spiel, in dem verschiedene Planeten unterschiedliche Zeitskalen haben. Und ich frage mich, wie es möglich sein könnte, Datetime-Objekte zu modifizieren.Manipulieren von DateTime und TimeDelta Objekten in Python

Zum Beispiel, wenn ich ein Datum Zeit Objekt habe - einige Vergangenheit Datetime-Objekt Ich frage mich, ob es möglich war zu wissen, wie oft 6 Stunden in die verschiedenen und was der Rest in Minuten war?

Zum Beispiel ...

now = datetime.now() 
then = some datetime object 
diff = now - then 
num 6 hour blocks = diff/6 (rounded down) 
minutes = diff % 6 

Dank!

+4

Können Sie Ihre Frage bitte besser erklären. Schreibe Pseudo-Code oder zeige, was du versucht hast. – jon

+0

oder ich denke, eine andere Art der Formulierung wäre es gibt es eine Möglichkeit, mit Timedelta-Objekte als doubles oder floats umzugehen? –

+0

Sie können auch mit dem Erstellen einer eigenen Datetime-Klasse experimentieren. Hängt davon ab, wie Sie Ihr Universum modellieren, aber es könnte einfacher sein, einfach mit einer konstanten Sekunde zu arbeiten, und dann hätte jeder Planet eine Anzahl von Sekunden pro Rotation (Tag/Nacht-Zyklus) und eine Anzahl von Sekunden pro Umlauf um den lokalen Stern. – aychedee

Antwort

2

Timedelta Objekte in Python eine total_seconds Methode 2.7. Also könntest du damit arbeiten. Sie erhalten ein Timedelta-Objekt zurück, wenn Sie ein Datetime-Objekt von einem anderen subtrahieren.

from datetime import timedelta 

minutes = 60 
hours = 60 * minutes 
days = 24 * hours 

diff = timedelta(days=6) 

days_in_the_past = int(diff.total_seconds()/days) 
hours_remainder = diff.total_seconds() % days 

hours_in_the_past = int(diff.total_seconds()/hours) 
seconds_remainder = diff.total_seconds() % hours 

Ist das ziemlich genau das, was Sie tun wollten? Wenn Sie eine ältere Version von Python verwenden, dann könnten Sie eine Funktion definieren, die dasselbe wie die total_seconds-Methode wie folgt macht:

def total_seconds(timedelta_object): 
    return timedelta_object.days * 86400 + timedelta_object.seconds 
0

timedelta Objekte haben nur days, seconds und microseconds Felder, so dass ich denke, für Stunden und Minuten werden Sie seconds verwenden:

num_blocks = diff.seconds//(6*3600) 
minutes = (diff.seconds%(6*3600))//60 
+0

vielen dank! –

Verwandte Themen