【Python】timedeltaオブジェクトの活用事例20選

Python
この記事は約11分で読めます。

こんにちは、JS2IIUです。

timedeltaオブジェクトは、時間差を表現し、日付や時刻の計算に活用できる便利なオブジェクトです。ここでは、その多様な活用事例を20個、サンプルコード付きで紹介します。

datetimeモジュールについては、こちらの記事を参考にして下さい。

  1. timedeltaオブジェクトの活用事例20選
    1. 1. 時間差の作成: timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) を使用して時間差を作成
    2. 2. 時間差の属性へのアクセス: days, seconds, microseconds 属性で時間差の各要素にアクセス
    3. 3. 時間差の合計秒数: total_seconds() メソッドで時間差を秒数で取得
    4. 4. 時間差の加算・減算: 2つの timedelta オブジェクトを加算・減算
    5. 5. 時間差の乗算・除算: timedelta オブジェクトに数値を乗算・除算
    6. 6. 日付の加算・減算: date オブジェクトに timedelta オブジェクトを加算・減算して、未来や過去の日付を計算
    7. 7. 日時の加算・減算: datetime オブジェクトに timedelta オブジェクトを加算・減算して、未来や過去の日時を計算
    8. 8. 2つの日付の間の日数を計算: 2つの date オブジェクトの差分から日数を計算
    9. 9. 2つの日時の間の時間差を計算: 2つの datetime オブジェクトの差分から時間差を計算
    10. 10. 月末日の計算: timedelta オブジェクトを利用して、特定の月の月末日を計算
    11. 11. 特定の日付からn営業日後の日付を計算: 土日を除いたn営業日後の日付を計算
    12. 12. 特定の時間帯の判定: timedelta を使用して、現在時刻が特定の時間帯に含まれるかどうかを判定
    13. 13. タイムゾーンを考慮した日時計算: timedelta と timezone オブジェクトを組み合わせて、タイムゾーンを考慮した日時を計算
    14. 14. 定期的なイベントのスケジュール: timedelta を使用して、定期的なイベントの次回発生日時を計算
    15. 15. クーポンの有効期限: timedelta を使用して、クーポンの発行日から有効期限を計算
    16. 16. フライト時間の計算: timedelta を使用して、出発時刻と到着時刻からフライト時間を計算
    17. 17. 年齢の計算: timedelta を使用して、生年月日から年齢を計算
    18. 18. 睡眠時間の計算: 睡眠時間と起床時間から、timedelta を使用して睡眠時間を計算
    19. 19. 配達予定日の計算: 注文日から timedelta を使用して配達予定日を計算
    20. 20. 実験経過時間の測定: 実験の開始時刻と終了時刻から、timedelta を使用して実験経過時間を測定
  2. 参考

timedeltaオブジェクトの活用事例20選

基本的な操作

1. 時間差の作成: timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) を使用して時間差を作成

Python
import datetime

# 3日間の時間差
three_days = datetime.timedelta(days=3)
print(three_days)  # 3 days, 0:00:00

# 1時間30分の時間差
one_hour_thirty_minutes = datetime.timedelta(hours=1, minutes=30)
print(one_hour_thirty_minutes)  # 1:30:00

2. 時間差の属性へのアクセス: days, seconds, microseconds 属性で時間差の各要素にアクセス

Python
import datetime

delta = datetime.timedelta(days=1, hours=12, minutes=30)
print(delta.days)        # 1
print(delta.seconds)     # 45000 (12時間30分を秒に変換)
print(delta.microseconds)  # 0

3. 時間差の合計秒数: total_seconds() メソッドで時間差を秒数で取得

Python
import datetime

delta = datetime.timedelta(days=1, hours=12)
total_seconds = delta.total_seconds()
print(total_seconds)  # 129600.0

4. 時間差の加算・減算: 2つの timedelta オブジェクトを加算・減算

Python
import datetime

delta1 = datetime.timedelta(days=1)
delta2 = datetime.timedelta(hours=12)
delta3 = delta1 + delta2
print(delta3)  # 1 day, 12:00:00

delta4 = delta1 - delta2
print(delta4)  # 0:12:00

5. 時間差の乗算・除算: timedelta オブジェクトに数値を乗算・除算

Python
import datetime

delta = datetime.timedelta(days=1)
double_delta = delta * 2
print(double_delta)  # 2 days, 0:00:00

half_delta = delta / 2
print(half_delta)  # 12:00:00

日付・時刻の計算

6. 日付の加算・減算: date オブジェクトに timedelta オブジェクトを加算・減算して、未来や過去の日付を計算

Python
import datetime

today = datetime.date.today()
tomorrow = today + datetime.timedelta(days=1)
print(tomorrow)

one_week_ago = today - datetime.timedelta(weeks=1)
print(one_week_ago)

7. 日時の加算・減算: datetime オブジェクトに timedelta オブジェクトを加算・減算して、未来や過去の日時を計算

Python
import datetime

now = datetime.datetime.now()
three_hours_later = now + datetime.timedelta(hours=3)
print(three_hours_later)

8. 2つの日付の間の日数を計算: 2つの date オブジェクトの差分から日数を計算

Python
import datetime

date1 = datetime.date(2024, 12, 1)
date2 = datetime.date(2024, 12, 25)
days_between = date2 - date1
print(days_between.days)  # 24

9. 2つの日時の間の時間差を計算: 2つの datetime オブジェクトの差分から時間差を計算

Python
import datetime

datetime1 = datetime.datetime(2024, 12, 1, 10, 0, 0)
datetime2 = datetime.datetime(2024, 12, 1, 12, 30, 0)
time_difference = datetime2 - datetime1
print(time_difference)  # 2:30:00

10. 月末日の計算: timedelta オブジェクトを利用して、特定の月の月末日を計算

Python
import datetime

def get_last_day_of_month(year, month):
  """
  特定の月の月末日を求める関数

  Args:
    year: 年
    month: 月

  Returns:
    月末日 (dateオブジェクト)
  """
  if month == 12:
    next_month = datetime.date(year + 1, 1, 1)
  else:
    next_month = datetime.date(year, month + 1, 1)
  last_day = next_month - datetime.timedelta(days=1)
  return last_day

last_day_of_december = get_last_day_of_month(2024, 12)
print(last_day_of_december)  # 2024-12-31

より実践的な例

11. 特定の日付からn営業日後の日付を計算: 土日を除いたn営業日後の日付を計算

Python
import datetime

def get_business_day_after(date1, n):
  """
  特定の日付からn営業日後の日付を求める関数 (土日を除く)

  Args:
    date1: 日付 (dateオブジェクト)
    n: 営業日数

  Returns:
    日付 (dateオブジェクト)
  """
  current_date = date1
  business_days_counted = 0
  while business_days_counted < n:
    current_date += datetime.timedelta(days=1)
    # 土日を除く
    if current_date.weekday() < 5:
      business_days_counted += 1
  return current_date

# 2024年12月18日から5営業日後の日付を求める
business_day_after = get_business_day_after(datetime.date(2024, 12, 18), 5)
print(business_day_after)  # 2024-12-24

12. 特定の時間帯の判定: timedelta を使用して、現在時刻が特定の時間帯に含まれるかどうかを判定

Python
import datetime

def is_within_time_range(start_time, end_time):
  """
  現在時刻がstart_timeからend_timeの間かどうかを判定する関数

  Args:
    start_time: 開始時刻 (timeオブジェクト)
    end_time: 終了時刻 (timeオブジェクト)

  Returns:
    時間帯内ならTrue、そうでなければFalse
  """
  now = datetime.datetime.now().time()
  start_datetime = datetime.datetime.combine(datetime.date.today(), start_time)
  end_datetime = datetime.datetime.combine(datetime.date.today(), end_time)
  now_datetime = datetime.datetime.combine(datetime.date.today(), now)
  if start_datetime < end_datetime:
    return start_datetime <= now_datetime < end_datetime
  else:  # 日をまたいでいる場合
    return start_datetime <= now_datetime or now_datetime < end_datetime

# 午前9時から午後5時までの間かどうかを判定
if is_within_time_range(datetime.time(9, 0), datetime.time(17, 0)):
  print("営業時間内です")
else:
  print("営業時間外です")

13. タイムゾーンを考慮した日時計算: timedelta と timezone オブジェクトを組み合わせて、タイムゾーンを考慮した日時を計算

Python
import datetime

# 東京のタイムゾーン
tokyo_tz = datetime.timezone(datetime.timedelta(hours=9))

# 東京の現在日時
now_tokyo = datetime.datetime.now(tokyo_tz)

# 3時間後のロンドン時間 (UTC)
london_time = now_tokyo + datetime.timedelta(hours=3)
london_time_utc = london_time.astimezone(datetime.timezone.utc)
print(london_time_utc)

14. 定期的なイベントのスケジュール: timedelta を使用して、定期的なイベントの次回発生日時を計算

Python
import datetime

# 毎週月曜日に発生するイベント
event_interval = datetime.timedelta(weeks=1)
last_event_date = datetime.datetime(2024, 12, 9, 10, 0, 0)  # 最後のイベント発生日時

# 次回イベント発生日時を計算
next_event_date = last_event_date + event_interval
print(next_event_date)  # 2024-12-16 10:00:00

15. クーポンの有効期限: timedelta を使用して、クーポンの発行日から有効期限を計算

Python
import datetime

issue_date = datetime.datetime.now()
expiry_days = 30
expiry_date = issue_date + datetime.timedelta(days=expiry_days)
print(f"クーポンの有効期限は{expiry_date}です")

16. フライト時間の計算: timedelta を使用して、出発時刻と到着時刻からフライト時間を計算

Python
import datetime

departure_time = datetime.datetime(2024, 12, 15, 10, 0, 0)
arrival_time = datetime.datetime(2024, 12, 15, 13, 30, 0)
flight_time = arrival_time - departure_time
print(f"フライト時間は{flight_time}です")  # 3:30:00

17. 年齢の計算: timedelta を使用して、生年月日から年齢を計算

Python
import datetime

birth_date = datetime.date(1990, 1, 1)
today = datetime.date.today()
age_delta = today - birth_date
age_years = age_delta.days // 365
print(f"年齢は{age_years}歳です")

18. 睡眠時間の計算: 睡眠時間と起床時間から、timedelta を使用して睡眠時間を計算

Python
import datetime

sleep_time = datetime.datetime(2024, 12, 14, 23, 0, 0)
wake_up_time = datetime.datetime(2024, 12, 15, 7, 0, 0)
sleep_duration = wake_up_time - sleep_time
print(f"睡眠時間は{sleep_duration}です")  # 8:00:00

19. 配達予定日の計算: 注文日から timedelta を使用して配達予定日を計算

Python
import datetime

order_date = datetime.date.today()
delivery_days = 3
estimated_delivery_date = order_date + datetime.timedelta(days=delivery_days)
print(f"配達予定日は{estimated_delivery_date}です")

20. 実験経過時間の測定: 実験の開始時刻と終了時刻から、timedelta を使用して実験経過時間を測定

Python
import datetime
import time

start_time = datetime.datetime.now()

# 実験処理

time.sleep(5)  # 5秒間の処理を想定

end_time = datetime.datetime.now()
elapsed_time = end_time - start_time
print(f"実験経過時間: {elapsed_time}")

これらの例は、timedelta オブジェクトが日付や時刻の計算に非常に役立つことを示しています。

参考

コメント

タイトルとURLをコピーしました