こんにちは、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`ライブラリの世界を探検します。お楽しみに!
コメント