【便利】Pythonのtimedeltaを完全マスター|実例付

※本サイトにはプロモーション・広告が含まれています。

(最終更新日:2023年7月)

✔この記事がお役に立つ方

「Pythonのtimedeltaとは何なのだろう?」

「Pythonのtimedeltaの正しい使い方や応用を知りたい」

「Pythonのtimedeltaを活用した具体的なコード例が見たい」

✔記事を通して解説する内容

  • Pythonのtimedeltaの基本概念
  • Pythonのtimedeltaの使い方とその応用法
  • Pythonのtimedeltaを活用した実例

当記事では、python timedeltaの基礎から応用方法まで、具体的なコード例を交えてわかりやすく解説します。

最後までお読みください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間17万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

Pythonにおけるtimedeltaの基礎知識

こちらでは、Pythonのtimedeltaについて、基本をお伝えしていきます。

Pythonのtimedeltaを理解し使いこなすことのメリットを伝えるため、以下の内容を説明します。

  • Pythonにおけるtimedeltaの概要
  • timedeltaが必要な理由

Pythonにおけるtimedeltaの概要

Pythonのtimedeltaは、datetimeモジュールの一部で、2つの日付や時間の間の差を表せる機能です。

差分を日、時間、分、秒、ミリ秒、マイクロ秒を表現できます。

from datetime import datetime, timedelta

# 現在の日時を取得
now = datetime.now()

# 1日後の日時を計算
one_day_later = now + timedelta(days=1)

# 2時間後の日時を計算
two_hours_later = now + timedelta(hours=2)

# 30分前の日時を計算
thirty_minutes_ago = now - timedelta(minutes=30)

# 100ミリ秒後の日時を計算
hundred_milliseconds_later = now + timedelta(milliseconds=100)

# 500マイクロ秒前の日時を計算
five_hundred_microseconds_ago = now - timedelta(microseconds=500)

# timedeltaオブジェクトの属性を使用して、日数、時間、分、秒、マイクロ秒を取得
print(one_day_later.days)  # 1
print(two_hours_later.seconds // 3600)  # 2
print(thirty_minutes_ago.seconds // 60)  # 30
print(hundred_milliseconds_later.microseconds // 1000)  # 100
print(five_hundred_microseconds_ago.microseconds)  # 500

timedeltaが必要な理由

日付や時間の計算は、開発作業の中でも頻繁に遭遇する課題のひとつです。

例えば、あるイベントからどれだけ時間が経過したかや、ある日からどれだけ時間が過ぎると特定の日になるか、などの計算が挙げられます。

timedeltaはこのような時間の計算を容易におこなえるツールなのです。

from datetime import datetime, timedelta

# 現在の日時を取得
now = datetime.now()

# 1週間後の日時を計算
one_week_later = now + timedelta(weeks=1)

# 2時間30分前の日時を計算
two_hours_thirty_minutes_ago = now - timedelta(hours=2, minutes=30)

# 3日後の日付を計算
three_days_later = now + timedelta(days=3)

# 1時間後の時間を計算
one_hour_later = now + timedelta(hours=1)

# 1時間15分前の時間を計算
one_hour_fifteen_minutes_ago = now - timedelta(hours=1, minutes=15)

# timedeltaオブジェクトの属性を使用して、日数、時間、分を取得
print(one_week_later.days)  # 7
print(two_hours_thirty_minutes_ago.seconds // 3600)  # -2
print(three_days_later.days)  # 3
print(one_hour_later.seconds // 3600)  # 1
print(one_hour_fifteen_minutes_ago.seconds // 60)  # -75

Python timedeltaの使い方

こちらでは、Pythonのtimedeltaについての基本的な使い方をお伝えしていきます。

使い方を理解すれば、時間や日付の演算がより手軽になるでしょう。

  • timedeltaのインポート方法
  • 時間単位:利用可能なオプション
  • timedeltaオブジェクトの生成

timedeltaのインポート方法

Pythonのtimedeltaを使用するためには、まずdatetimeモジュールをインポートする必要があります。

以下のようにfrom datetime import timedeltaと記述することで、timedeltaクラスを利用することができます。

from datetime import timedelta

時間単位:利用可能なオプション

timedeltaオブジェクトを作成する際には、以下の単位で時間を指定することができます。

  • 日(days)
  • 時間(hours)
  • 分(minutes)
  • 秒(seconds)
  • マイクロ秒(microseconds)

また、weeksというパラメータも提供されており、1週間を表します。

timedeltaオブジェクトの生成

timedeltaオブジェクトの生成は非常に直感的で、時間単位をパラメータとして与えることで作成できます。

以下に示す例では、3日と12時間を表現するtimedeltaオブジェクトを作成します。

from datetime import timedelta

# timedeltaオブジェクトの作成
delta = timedelta(days=3, hours=12)

# 出力結果:3日と12時間
print(delta)

このように、timedeltaオブジェクトは日、時間、分、秒、マイクロ秒を表現するために使用され、簡単に時間差を計算することが可能です。

実践!Python timedeltaで時間の操作

Pythonのtimedeltaにおける時間操作を詳しくみていきます。

具体的な操作方法を学ぶことで、timedeltaの有用性をより深く理解していただけるでしょう。

  • 時間の加算
  • 時間の減算
  • 時間の差分の算出法

時間の加算

timedeltaオブジェクトは、Pythonの標準的な算術演算子を使用した操作が可能です。

例えば、2つのtimedeltaオブジェクトの和を取ることで、時間を加算できます。

from datetime import timedelta

# timedeltaオブジェクトの作成
delta1 = timedelta(days=3, hours=12)
delta2 = timedelta(days=2, hours=6)

# timedeltaオブジェクトの加算
result = delta1 + delta2

# 出力結果:5日と18時間
print(result)

delta1delta2の時間を加算しています。

合計で5日と18時間を得られました。

時間の減算

timedeltaオブジェクトで、減算も可能です。

以下のコードは、delta1からdelta2を引くことで時間を減算しています。

from datetime import timedelta

# timedeltaオブジェクトの作成
delta1 = timedelta(days=3, hours=12)
delta2 = timedelta(days=2, hours=6)

# timedeltaオブジェクトの減算
result = delta1 - delta2

# 出力結果:1日と6時間
print(result)

delta1delta2の時間差がどれだけあるか計算できます。

時間の差分の算出法

timedeltaオブジェクトは、日付や時間の差分を計算する際にも非常に有用です。

datetimeモジュールを使用することで、2つの異なる日付または時間の間の差分をtimedeltaオブジェクトとして簡単に取得できます。

from datetime import datetime, timedelta

# datetimeオブジェクトの作成
dt1 = datetime(2023, 6, 15)  # 2023年6月15日
dt2 = datetime(2023, 7, 20)  # 2023年7月20日

# timedeltaオブジェクトの取得
delta = dt2 - dt1

# 出力結果:35日間
print(delta)

2023年6月15日と2023年7月20日との間の差分を計算しています。

2つの差は35日間であることがわかりました。

高度な利用:timedeltaの活用法

ここからは、「Python timedeltaの活用法」について詳しく説明します。

日常的なタスクやプログラミングの課題に対応するために、どのようにtimedeltaを使用できるかが明確になるでしょう。

  • 残り日数の計算:締切日までの日数設定
  • 日付の範囲取得:特定の範囲内の日付取得
  • 過去・未来の日付取得:指定日からの過去・未来の日付算出

残り日数の計算:締切日までの日数設定

一般的な活用例としては、特定の締切日までの残り日数を計算するといった場合があります。

プロジェクトのスケジューリングやタスク管理において、特に有用です。

from datetime import datetime, timedelta

# 現在の日付を取得
now = datetime.now()

# 締切日を設定
deadline = datetime(2023, 7, 31)

# 残り日数を計算
remaining = deadline - now

# 出力結果
print(f'残り日数は: {remaining.days} 日です')

このコードは現在の日付と締切日の間の差(残り日数)を計算しています。

締切日までの日数を知ることは、タスクの優先順位を決定する際や、作業のスケジューリングを行う上で重要な情報です。

日付の範囲取得:特定の範囲内の日付取得

別の一般的な使用例は、特定の範囲内のすべての日付を取得することです。

たとえば、特定の期間内で何が起こったかを解析する場合や、イベントスケジューリングを行う場合に役立ちます。

from datetime import datetime, timedelta

# 開始日と終了日を設定
start_date = datetime(2023, 1, 1)
end_date = datetime(2023, 1, 7)

# 日付範囲を取得
delta = timedelta(days=1)
current_date = start_date
while current_date <= end_date:
    print(current_date)
    current_date += delta

このスクリプトでは、開始日から終了日までの全日付を表示。

timedeltaオブジェクト(この場合は1日)を開始日に加えて、次の日付を生成します。

これを終了日に達するまで繰り返すのです。

過去・未来の日付取得:指定日からの過去・未来の日付算出

timedeltaで、特定の日付から、指定した期間前または後の日付を簡単に算出できます。

過去のデータを取得する際や、未来のイベントを予測する際に便利です。

from datetime import datetime, timedelta

# 基準日を設定
base_date = datetime(2023, 1, 1)

# 過去の日付を取得
past_date = base_date - timedelta(days=30)
print(f"30日前の日付は: {past_date}")

# 未来の日付を取得
future_date = base_date + timedelta(days=30)
print(f"30日後の日付は: {future_date}")

基準日から30日前と30日後の日付を計算。

timedeltaを引くことで過去の日付を、加えることで未来の日付を取得できます。

Pythonで使えるほかの時間関連オブジェクト

ここでは、Pythonに組み込まれている他の時間関連オブジェクトについて説明します。

これらのオブジェクトは、timedeltaと組み合わせて時間と日付の計算をより強力で柔軟におこなえるでしょう。

  • dateオブジェクト
  • datetimeオブジェクト
  • timeオブジェクト

dateオブジェクト

dateオブジェクトは、日付(年、月、日)だけを格納します。

時間の情報は含まれません。これは、特定の日付を追跡するだけで十分な場合に便利です。

from datetime import date

# dateオブジェクトを生成
d = date(2023, 1, 1)
print(d)  # 2023-01-01

datetimeオブジェクト

datetimeオブジェクトは、日付と時間の両方を格納します。

これは、時間単位でのイベントやログの追跡に役立ちます。

from datetime import datetime

# datetimeオブジェクトを生成
dt = datetime(2023, 1, 1, 13, 30, 45)
print(dt)  # 2023-01-01 13:30:45

datetimeについてはこちらもご覧ください。

【Python】datetime型の扱い方|コードで徹底解説
Pythonのdatetime型を扱う方法が知りたいですか?当記事では、Python datetimeの基本的な使用方法や実践的な例を詳細に解説しています。さまざまなケースに合わせたコードを紹介していますので、初心者の方でもすぐに手を動かして学べます。ぜひご覧ください。

timeオブジェクト

timeオブジェクトは、時間(時間、分、秒、マイクロ秒)のみを格納します。

日付の情報は含まれません。これは、1日の中での時間のみを追跡する場合に便利です。

from datetime import time

# timeオブジェクトを生成
t = time(13, 30, 45)
print(t)  # 13:30:45

これらの時間関連オブジェクトは全て、timedeltaオブジェクトと組み合わせて使うことが可能です。

例えば、datetimeオブジェクトにtimedeltaオブジェクトを加えることで、特定の日時から指定した時間だけ進んだ日時を計算することができます。

まとめ:

当記事を通して、Pythonのtimedeltaオブジェクトについて詳しく学びました。

  • timedeltaは、Pythonの組み込みのdatetimeモジュールに含まれる、時間間隔を表現するクラス
  • timedeltaオブジェクトを使用して、時間の加算、減算、差分の計算をおこなえる
  • timedeltaを使用することで、具体的な日数や時間を基にした時間の操作や計算できる
  • timedeltaは、date、datetime、timeオブジェクトと連携して使用する

ただし合わせて知っておくべき注意点もあります。

  1. timedeltaは最大で999999999日までしか表現できません。
    それ以上の期間を扱いたい場合は、他の手段を検討する必要があります。
  2. timedeltaでは、時間単位を混在させることができますが、複雑な時間単位の操作はエラーの元になり得ます。
    常に操作を明確にして、可能な限りシンプルに保つことが重要です。

日付や時間に関する操作は、Pythonプログラミングの日常的な部分を占めています。

注意点も理解しつつ、手を動かしながら学びましょう。

Datetime型を文字列へ変換するstrftimeについてはこちらの記事でどうぞ。

【書式コード一覧付】Pythonのstrftimeをマスターしよう
Pythonで「strftime」関数を使用する方法を知りたいですか?strftime関数は日時データを様々な形式に表現し、プログラム内で効率的に操作するための基本的なツールです。当記事では、Pythonのstrftime関数の使用法を具体的なコード付きで詳細に解説しています。特にPython初心者の方は必見です。
タイトルとURLをコピーしました