web-dev-qa-db-ja.com

タイムデルタを日、時、分に変換する

私はタイムデルタを持っています。私はそれから日数、時間数、分数を求めています - タプルか辞書のどちらかとして...私は悩んでいません。

私は何十年もの間、十数回の言語でこれを十数回行ってきたはずですが、通常、Pythonはすべてに対する単純な答えを持っているので、ちょっと気味悪い(まだ冗長)数学をやめさせる前にここで尋ねてください。

フーズ氏は良い点を挙げています。

私はそれぞれが期間を持つ「リスト」(eBayリストに少し似ている)を扱っています。 when_added + duration - nowを実行して残り時間を見つけようとしています

それがDSTを説明するものではないと言っているのは正しいですか?そうでない場合、1時間を足したり引いたりする最も簡単な方法は何ですか?

190
Oli

datetime.timedeltatdがある場合、td.daysはすでにあなたが望む「日」を与えています。 timedeltaの値は一日の何分の一秒(直接の数時間や数分ではない)を保持するので、実際には "吐き気のように単純な数学"を実行する必要があります。

def days_hours_minutes(td):
    return td.days, td.seconds//3600, (td.seconds//60)%60
277
Alex Martelli

これはもう少しコンパクトです、あなたは2行で時間、分と秒を得ます。

days = td.days
hours, remainder = divmod(td.seconds, 3600)
minutes, seconds = divmod(remainder, 60)
# If you want to take into account fractions of a second
seconds += td.microseconds / 1e6
63
mberacochea
days, hours, minutes = td.days, td.seconds // 3600, td.seconds // 60 % 60

DSTに関しては、両方のdatetimeオブジェクトを秒に変換するのが一番良いと思います。このようにしてシステムがDSTを自動的に計算します。

>>> m13 = datetime(2010, 3, 13, 8, 0, 0)  # 2010 March 13 8:00 AM
>>> m14 = datetime(2010, 3, 14, 8, 0, 0)  # DST starts on this day, in my time zone
>>> mktime(m14.timetuple()) - mktime(m13.timetuple())     # difference in seconds
82800.0
>>> _/3600                                                # convert to hours
23.0
24
Jason Orendorff

わからない

days, hours, minutes = td.days, td.seconds // 3600, td.seconds // 60 % 60

これはどう

days, hours, minutes = td.days, td.seconds // 3600, td.seconds % 3600 / 60.0

あなたは分と分の秒をフロートとして得ます。

6
campbell

タイムデルタにはdaysおよびseconds属性があります。簡単に自分で変換できます。

4
Jochen Ritzel