2012-04-02 6 views
2

で私はDateTimeおよびTimeデルタオブジェクトを操作する方法を疑問に思って。私は、異なる惑星が異なるタイムスケールを持つゲームを書いています。そして、私はそれが日時オブジェクトをmodすることが可能かもしれないと思っていました。私は、日付時刻オブジェクトがあればの操作のDateTimeとはtimedeltaオブジェクトのpython

は、例えば - いくつかの過去のdatetimeオブジェクトを、何回6時間が異なると、何分余りだったに可能性があります知ることができた場合、私は不思議でしたか?例えば

...

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

ありがとう!

+4

質問をよくしてください。擬似コードを書くか、試したことを示す。 – jon

+0

は、または私はダブルスや山車などはtimedeltaオブジェクトに対処する方法があり、それは次のようになりフレージングの別の方法を推測しますか? –

+0

また、独自のDateTimeクラスの作成を試してみることをお勧めします。あなたは宇宙をモデル化する方法によって異なりますが、それだけで一定の秒で動作するようにし、各惑星が回転あたりの秒数(昼/夜サイクル)と地元の星の周りの片道の秒数を持っているでしょう単純かもしれません。 – aychedee

答えて

2

はtimedeltaオブジェクトは、Python 2.7でtotal_secondsメソッドを持っています。だから、それを使ってそれを解決することができます。 1つのdatetimeオブジェクトを別のものから減算するとtimedeltaオブジェクトが返されます。

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 

これはあなたのやりたいことですか?古いバージョンのPythonを使用している場合は、次のようなtotal_secondsメソッドと同じことをした関数を定義することができます:

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

timedeltaオブジェクトはdayssecondsmicrosecondsフィールドを持っているので、私は時間と分のためにあなたがsecondsを使用する必要がありますね:

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

はありがとうございました! –

関連する問題