【Python標準ライブラリ編 #2】datetimeで時間マスター!オリジナル・カウントダウンタイマーを作ろう

ALL

こんにちは、Tech Samuraiです!
前回の記事「osとshutilでPCを自動整理!デスクトップお掃除ツールを作ろう」では、散らかったファイルを整理整頓する、非常に実用的なツールを作成しましたね。

ファイルという「空間」を整理できるようになったら、次なるターゲットは「時間」です。Pythonには、日付や時刻を驚くほど簡単に扱うことができる、強力な標準ライブラリ**`datetime`**が用意されています。

今回のミニプロジェクトでは、この`datetime`ライブラリを使い、**「指定した未来のイベントまで、あと何日?」を計算してくれる、オリジナルのカウントダウンタイマー**を作成します。これをマスターすれば、あなたのプログラムは時間という概念を理解し、それに基づいた処理ができるようになります。さあ、時間の流れをプログラムで捉えましょう!


ステップ1:時間の基本部品 – `datetime`オブジェクト

`datetime`ライブラリで時間を扱う基本は、`datetime`オブジェクトという「時間の情報が詰まった特別な箱」を扱うことです。この箱には、年、月、日、時、分、秒といった情報がすべて含まれています。

現在時刻を取得する:`datetime.now()`

まずは、プログラムを実行した「今」この瞬間の時刻を取得してみましょう。

import datetime

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

print(f"現在の日時: {now}")
print(f"年: {now.year}")
print(f"月: {now.month}")
print(f"日: {now.day}")

特定の日時を作成する:`datetime.datetime()`

次に、目標となる未来の日時オブジェクトを作成します。例えば、2025年の大晦日を設定してみましょう。

# 2025年12月31日のdatetimeオブジェクトを作成
target_date = datetime.datetime(2025, 12, 31)
print(f"目標の日時: {target_date}")

ステップ2:時間の差を計算する – `timedelta`オブジェクト

「現在」と「未来」という2つの時間の点が手に入りました。この2点間の距離(時間の差)を計算するには、単純に引き算を行います。その結果は、**`timedelta`**という、**時間の長さ**を表す特別なオブジェクトになります。

例えるなら… `datetime`が「9月5日」や「12月31日」といったカレンダー上の**特定の地点**だとすれば、`timedelta`は「26日間」や「3時間15分」といった**期間そのもの**を表します。

import datetime

now = datetime.datetime.now()
target_date = datetime.datetime(2025, 12, 31)

# 2つの日時の差を計算
time_left = target_date - now

print(f"残り時間: {time_left}")
print(f"残り日数だけを取り出す: {time_left.days}日")

`time_left.days`のように、`timedelta`オブジェクトから日数だけを簡単に取り出すことができます。


ステップ3:カウントダウン・スクリプトを組む

これまでの知識を組み合わせて、目標日までの日数を計算するスクリプトを完成させましょう。

import datetime

# 1. 目標日を設定
target_year = 2025
target_month = 12
target_day = 31
target_date = datetime.datetime(target_year, target_month, target_day)

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

print(f"目標日: {target_date.year}年{target_date.month}月{target_date.day}日")

# 3. 日数の差を計算
time_left = target_date - now

# 4. 結果を表示
# 既に過ぎている場合も考慮
if time_left.days >= 0:
    print(f"目標日まで、あと {time_left.days} 日です!")
else:
    print(f"目標日から、既に {-time_left.days} 日が経過しました。")

ステップ4:インタラクティブにする(応用編)

毎回コードを書き換えるのは大変なので、ユーザーが自由な日付を入力できるように改良してみましょう。`input()`を使い、エラー処理も加えます。

import datetime

print("カウントダウンしたい目標日を入力してください。")

try:
    year = int(input("年 (西暦): "))
    month = int(input("月: "))
    day = int(input("日: "))

    target_date = datetime.datetime(year, month, day)
    now = datetime.datetime.now()

    time_left = target_date - now

    print("-" * 20)
    if time_left.total_seconds() > 0:
        print(f"{year}年{month}月{day}日まで、あと {time_left.days} 日と 約{int(time_left.seconds / 3600)} 時間です。")
    else:
        print("その日は既に過ぎています。")

except ValueError:
    print("エラー: 無効な日付が入力されました。半角数字で正しく入力してください。")

`try-except`ブロックで囲むことで、ユーザーが無効な日付(例: 2月30日)を入力した際にプログラムがクラッシュするのを防いでいます。


まとめ

今回は、Pythonの標準ライブラリ`datetime`を使い、時間を扱う方法を探検しました。

  • 現在日時を取得するdatetime.datetime.now()
  • 特定の日時オブジェクトを作成するdatetime.datetime()
  • 2つの日時の差(期間)を表すtimedeltaオブジェクト

これであなたのプログラムは、時間という概念を理解し、未来のイベントを予測したり、過去からの経過時間を計測したりできるようになりました。

ファイルを整理し、時間を扱えるようになったら、次は何をしたくなるでしょう? そう、プログラムの設定や状態を「保存」したくなりますよね。次回は、Pythonのデータをファイルに保存・復元するための`json`ライブラリの世界を探検します。お楽しみに!

コメント

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