322

タイムデルタがあります。そこから日、時間、分が必要です-タプルまたは辞書として...私は大騒ぎしていません。

私はこれを何年にもわたって十数の言語で十数回行ったに違いありませんが、Python は通常、すべてに対して簡単な答えを持っているので、うんざりさせるほど単純な (まだ冗長な) 数学を打ち破る前に、ここで質問することにしました。

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

私は、それぞれに期間がある「リスト」(ebay のリストに少し似ています) を扱っています。私はやることで残された時間を見つけようとしていますwhen_added + duration - now

それは DST を考慮しないと言っているのは正しいですか? そうでない場合、時間を加算/減算する最も簡単な方法は何ですか?

4

11 に答える 11

449

あなたがdatetime.timedeltatdを持っているなら、あなたtd.daysが望む「日」をすでにあなたに与えます。timedelta値は1日の分数を秒(直接時間や分ではなく)として保持するため、実際には「非常に単純な数学」を実行する必要があります。例:

def days_hours_minutes(td):
    return td.days, td.seconds//3600, (td.seconds//60)%60
于 2010-01-22T18:26:00.890 に答える
90

これはもう少しコンパクトで、時、分、秒が 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
于 2012-06-11T14:16:53.177 に答える
35
days, hours, minutes = td.days, td.seconds // 3600, td.seconds // 60 % 60

datetimeDSTに関しては、両方のオブジェクトを秒に変換するのが最善だと思います。このようにして、システムは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
于 2010-01-22T18:25:45.833 に答える
9

理解できない

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

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

于 2011-10-20T17:19:05.230 に答える
3

私は以下を使用しました:

delta = timedelta()
totalMinute, second = divmod(delta.seconds, 60)
hour, minute = divmod(totalMinute, 60)
print(f"{hour}h{minute:02}m{second:02}s")
于 2020-02-01T11:18:10.757 に答える
2

を使用するのが最も簡単な方法であることがわかりましたstr(timedelta)。のようにフォーマットされた文字列を返し、3 days, 21:06:40.001000単純な文字列操作または正規表現を使用して時間と分を解析できます。

于 2020-07-23T02:22:03.183 に答える
-5

timedeltaにはdaysseconds属性があります..自分で簡単に変換できます。

于 2010-01-22T18:24:25.010 に答える