21
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[python] datetime.time型で時間の足し引き

Last updated at Posted at 2018-10-29

概要(というか経緯)

時刻の足し引きにはdatetime.timedeltaを使うようですが、
datetime.time型とdatetime.timedelta型を+,-でつないだところ以下のエラーになってしまったので、
対処を調べました。

TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.timedelta'

エラーの原因と対処

pythonのdatetimeには、日付を表すdate型と時刻を表すtime型、両方を表すdatetime型がある。
timedeltaはdatetime型を元に計算するので、date型、time型はまずdatetime型への変換が必要
変換にはclassmethod datetime.combine()を使う。

時刻の足し算引き算をするコード

import datetime

basetime = datetime.time(23, 59, 00)

# 23時59分の一分後
dt1 = datetime.datetime.combine(datetime.date.today(), basetime) + datetime.timedelta(minutes=1)
# 23時59分の1秒前 
dt2 = datetime.datetime.combine(datetime.date.today(), basetime) - datetime.timedelta(seconds=1)

print(dt1.strftime("%H:%M:%S"))
print(dt2.strftime("%H:%M:%S"))

※コードの中では仮の日付としてdatetime.date.today()を利用していますが、うるう秒の入る日にどうなるかわからないので、適当な日付にしたほうが良いです。

output

00:00:00
23:58:59
21
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?