私はタイムデルタを持っています。私はそれから日数、時間数、分数を求めています - タプルか辞書のどちらかとして...私は悩んでいません。
私は何十年もの間、十数回の言語でこれを十数回行ってきたはずですが、通常、Pythonはすべてに対する単純な答えを持っているので、ちょっと気味悪い(まだ冗長)数学をやめさせる前にここで尋ねてください。
フーズ氏は良い点を挙げています。
私はそれぞれが期間を持つ「リスト」(eBayリストに少し似ている)を扱っています。 when_added + duration - now
を実行して残り時間を見つけようとしています
それがDSTを説明するものではないと言っているのは正しいですか?そうでない場合、1時間を足したり引いたりする最も簡単な方法は何ですか?
datetime.timedelta
値td
がある場合、td.days
はすでにあなたが望む「日」を与えています。 timedelta
の値は一日の何分の一秒(直接の数時間や数分ではない)を保持するので、実際には "吐き気のように単純な数学"を実行する必要があります。
def days_hours_minutes(td):
return td.days, td.seconds//3600, (td.seconds//60)%60
これはもう少しコンパクトです、あなたは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
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
わからない
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
あなたは分と分の秒をフロートとして得ます。
タイムデルタにはdays
およびseconds
属性があります。簡単に自分で変換できます。