Contents
- 1 はじめに
- 2 datetimeモジュールとは
- 3 現在の日付と時刻を取得する
- 4 取得した日時を変数に代入する
- 5 年・月・日を個別に取得する
- 6 現在の日付だけを取得する
- 7 現在の時刻だけを取得する
- 8 指定した日付と時刻を作成する
- 9 存在しない日付を指定した場合
- 10 日付と時刻の表示形式を変更する
- 11 strftimeで使用する主な書式
- 12 文字列を日付に変換する
- 13 strftimeとstrptimeの違い
- 14 日付同士を比較する
- 15 日付同士の差を求める
- 16 timedeltaを使って日付を計算する
- 17 時間や分を加算する
- 18 曜日を取得する
- 19 ファイル名に日時を追加する
- 20 処理時刻を記録する
- 21 datetimeを使ったサンプルプログラム
- 22 まとめ
はじめに
Pythonでプログラムを作成していると、日付や時間を扱う場面がよくあります。
例えば、次のような処理です。
- 現在の日付と時刻を取得する
- 今日の日付を画面に表示する
- ファイル名に日時を追加する
- ログに処理時刻を記録する
- 指定した日付までの日数を計算する
- 1週間後や3日前の日付を求める
Pythonでは、日付や時間を扱うためにdatetimeモジュールが用意されています。
今回は、datetimeモジュールを使った基本的な日付と時間の操作について説明します。
datetimeモジュールとは
datetimeは、Pythonの標準ライブラリに含まれているモジュールです。
追加でインストールする必要はありません。
プログラムの先頭に次のように記述することで使用できます。
from datetime import datetimedatetimeという名前が2回登場しているため、最初は少し分かりにくいかもしれません。
from datetime import datetime最初のdatetimeはモジュール名です。
2つ目のdatetimeは、モジュールの中に用意されている日時を扱うためのクラスです。
今回は、詳しい仕組みを覚える必要はありません。
「日付と時刻を扱うときに記述するもの」として覚えておきましょう。
現在の日付と時刻を取得する
現在の日付と時刻を取得するには、datetime.now()を使用します。
from datetime import datetime
print(datetime.now())実行結果の例は次のとおりです。
2026-07-18 14:35:42.123456
実行するタイミングによって、表示される日時は変わります。
表示内容は、左から順番に次のようになっています。
年-月-日 時:分:秒.マイクロ秒
今回の例では、次の日時を表しています。
2026年7月18日 14時35分42秒
最後に表示されている.123456は、1秒よりも細かいマイクロ秒です。
通常のプログラムでは、マイクロ秒まで使用しないことも多いため、必要に応じて表示形式を変更します。
取得した日時を変数に代入する
datetime.now()で取得した日時は、変数に代入できます。
from datetime import datetime
now = datetime.now()
print(now)実行結果の例は次のとおりです。
2026-07-18 14:35:42.123456
変数に代入しておくことで、取得した日時を複数の処理で使用できます。
from datetime import datetime
now = datetime.now()
print("現在の日時:", now)
print("年:", now.year)
print("月:", now.month)
print("日:", now.day)実行結果の例は次のとおりです。
現在の日時: 2026-07-18 14:35:42.123456
年: 2026
月: 7
日: 18
年・月・日を個別に取得する
datetime型のデータから、年や月などを個別に取得できます。
主に使用する属性は次のとおりです。
| 属性 | 取得できる値 |
|---|---|
year | 年 |
month | 月 |
day | 日 |
hour | 時 |
minute | 分 |
second | 秒 |
microsecond | マイクロ秒 |
実際に使用してみましょう。
from datetime import datetime
now = datetime.now()
print("年:", now.year)
print("月:", now.month)
print("日:", now.day)
print("時:", now.hour)
print("分:", now.minute)
print("秒:", now.second)実行結果の例は次のとおりです。
年: 2026
月: 7
日: 18
時: 14
分: 35
秒: 42
このように、取得した日時から必要な部分だけを取り出せます。
例えば、現在の時刻に応じてメッセージを変更することもできます。
from datetime import datetime
now = datetime.now()
if now.hour < 12:
print("おはようございます")
elif now.hour < 18:
print("こんにちは")
else:
print("こんばんは")now.hourには、現在の「時」が0から23までの数値で格納されています。
現在の日付だけを取得する
時刻を含めず、現在の日付だけを取得したい場合は、date()を使用します。
from datetime import datetime
today = datetime.now().date()
print(today)実行結果の例は次のとおりです。
2026-07-18
一度変数に代入してから、日付を取り出すこともできます。
from datetime import datetime
now = datetime.now()
today = now.date()
print(today)どちらの書き方でも同じ結果になります。
現在の時刻だけを取得する
現在の時刻だけを取得したい場合は、time()を使用します。
from datetime import datetime
current_time = datetime.now().time()
print(current_time)実行結果の例は次のとおりです。
14:35:42.123456
マイクロ秒も含まれるため、そのままでは少し見づらいことがあります。
表示形式を整える方法については、後ほど説明します。
指定した日付と時刻を作成する
datetimeを使って、任意の日付と時刻を作成することもできます。
from datetime import datetime
date_time = datetime(2026, 7, 18, 14, 30, 0)
print(date_time)実行結果は次のとおりです。
2026-07-18 14:30:00
各数値は、次の順番で指定します。
datetime(年, 月, 日, 時, 分, 秒)時刻を省略し、日付だけを指定することもできます。
from datetime import datetime
date_time = datetime(2026, 7, 18)
print(date_time)実行結果は次のとおりです。
2026-07-18 00:00:00
時刻を省略した場合は、0時0分0秒として扱われます。
存在しない日付を指定した場合
datetimeでは、存在しない日付を指定するとエラーが発生します。
from datetime import datetime
date_time = datetime(2026, 2, 30)
print(date_time)2月30日は存在しないため、次のようなエラーが発生します。
ValueError: day is out of range for month
月に13を指定した場合もエラーになります。
from datetime import datetime
date_time = datetime(2026, 13, 1)実行結果は次のようになります。
ValueError: month must be in 1..12
ユーザーが入力した日付を扱う場合は、例外処理と組み合わせることがあります。
from datetime import datetime
try:
date_time = datetime(2026, 2, 30)
print(date_time)
except ValueError:
print("正しい日付を指定してください")実行結果は次のとおりです。
正しい日付を指定してください
例外処理については、第10回で説明したtry-except構文を使用しています。
日付と時刻の表示形式を変更する
datetime.now()の結果をそのまま表示すると、次のような形式になります。
2026-07-18 14:35:42.123456
プログラムによっては、次のように表示したい場合があります。
2026年07月18日
または、次のような形式です。
2026/07/18 14:35:42
日時の表示形式を変更するには、strftime()を使用します。
from datetime import datetime
now = datetime.now()
formatted_date = now.strftime("%Y年%m月%d日")
print(formatted_date)実行結果の例は次のとおりです。
2026年07月18日
strftimeは、「string format time」の略として覚えると分かりやすいでしょう。
日時のデータを、指定した形式の文字列に変換するためのメソッドです。
strftimeで使用する主な書式
strftime()では、%Yや%mなどの書式コードを使用します。
よく使用する書式コードは次のとおりです。
| 書式コード | 内容 | 表示例 |
|---|---|---|
%Y | 西暦4桁 | 2026 |
%y | 西暦下2桁 | 26 |
%m | 月 | 07 |
%d | 日 | 18 |
%H | 時・24時間表記 | 14 |
%M | 分 | 35 |
%S | 秒 | 42 |
%A | 曜日名 | Saturday |
%a | 曜日の省略名 | Sat |
年月日をスラッシュで区切る場合は、次のように記述します。
from datetime import datetime
now = datetime.now()
print(now.strftime("%Y/%m/%d"))実行結果の例は次のとおりです。
2026/07/18
日付と時刻を表示する場合は、次のように記述します。
from datetime import datetime
now = datetime.now()
print(now.strftime("%Y/%m/%d %H:%M:%S"))実行結果の例は次のとおりです。
2026/07/18 14:35:42
日本語形式にすることもできます。
from datetime import datetime
now = datetime.now()
print(now.strftime("%Y年%m月%d日 %H時%M分%S秒"))実行結果の例は次のとおりです。
2026年07月18日 14時35分42秒
文字列を日付に変換する
strftime()は、日時を文字列に変換するために使用しました。
反対に、文字列を日時データに変換したい場合は、strptime()を使用します。
from datetime import datetime
text = "2026/07/18"
date_time = datetime.strptime(text, "%Y/%m/%d")
print(date_time)実行結果は次のとおりです。
2026-07-18 00:00:00
strptime()では、変換する文字列と、その文字列の形式を指定します。
datetime.strptime(文字列, 書式)次の文字列を変換する場合を考えてみましょう。
2026-07-18 14:30:00
プログラムは次のようになります。
from datetime import datetime
text = "2026-07-18 14:30:00"
date_time = datetime.strptime(
text,
"%Y-%m-%d %H:%M:%S"
)
print(date_time)実行結果は次のとおりです。
2026-07-18 14:30:00
文字列の形式と、指定する書式が一致している必要があります。
例えば、文字列がスラッシュ区切りになっているにもかかわらず、書式にハイフンを指定するとエラーになります。
from datetime import datetime
text = "2026/07/18"
date_time = datetime.strptime(text, "%Y-%m-%d")この場合、文字列の形式と書式が一致していないため、ValueErrorが発生します。
strftimeとstrptimeの違い
strftime()とstrptime()は名前が似ていますが、変換する方向が異なります。
strftime
日時データを文字列に変換します。
from datetime import datetime
now = datetime.now()
text = now.strftime("%Y/%m/%d")
print(text)strptime
文字列を日時データに変換します。
from datetime import datetime
text = "2026/07/18"
date_time = datetime.strptime(text, "%Y/%m/%d")
print(date_time)違いを表にまとめると、次のようになります。
| メソッド | 変換内容 |
|---|---|
strftime() | 日時から文字列へ変換 |
strptime() | 文字列から日時へ変換 |
最初は混同しやすいため、実際にコードを書きながら覚えていきましょう。
日付同士を比較する
datetime型の日付は、比較演算子を使って比較できます。
from datetime import datetime
date1 = datetime(2026, 7, 18)
date2 = datetime(2026, 8, 1)
print(date1 < date2)実行結果は次のとおりです。
True
2026年7月18日は、2026年8月1日より前の日付であるため、Trueになります。
日付が同じかどうかも確認できます。
from datetime import datetime
date1 = datetime(2026, 7, 18)
date2 = datetime(2026, 7, 18)
print(date1 == date2)実行結果は次のとおりです。
True
現在日時と指定日時を比較することもできます。
from datetime import datetime
now = datetime.now()
deadline = datetime(2026, 12, 31, 23, 59, 59)
if now < deadline:
print("期限前です")
else:
print("期限を過ぎています")申込期限やキャンペーン期間などを判定するときに利用できます。
日付同士の差を求める
2つの日付を引き算すると、その日付の差を求められます。
from datetime import datetime
start_date = datetime(2026, 7, 1)
end_date = datetime(2026, 7, 18)
difference = end_date - start_date
print(difference)実行結果は次のとおりです。
17 days, 0:00:00
日数だけを取得したい場合は、daysを使用します。
from datetime import datetime
start_date = datetime(2026, 7, 1)
end_date = datetime(2026, 7, 18)
difference = end_date - start_date
print(difference.days)実行結果は次のとおりです。
17
指定した日付まで、あと何日あるかを計算することもできます。
from datetime import datetime
today = datetime.now()
target_date = datetime(2026, 12, 31)
difference = target_date - today
print("今年の終わりまで、あと", difference.days, "日です")実行する日時によって、結果は変わります。
timedeltaを使って日付を計算する
「今日から7日後」や「3日前」の日付を求めたい場合は、timedeltaを使用します。
timedeltaを使用する場合は、次のようにインポートします。
from datetime import datetime, timedelta現在日時から7日後を求めてみましょう。
from datetime import datetime, timedelta
now = datetime.now()
one_week_later = now + timedelta(days=7)
print("現在:", now)
print("7日後:", one_week_later)実行結果の例は次のとおりです。
現在: 2026-07-18 14:35:42.123456
7日後: 2026-07-25 14:35:42.123456
3日前の日付を求める場合は、引き算を使用します。
from datetime import datetime, timedelta
now = datetime.now()
three_days_ago = now - timedelta(days=3)
print(three_days_ago)実行結果の例は次のとおりです。
2026-07-15 14:35:42.123456
時間や分を加算する
timedeltaでは、日数だけでなく、時間や分、秒も指定できます。
3時間後を求める
from datetime import datetime, timedelta
now = datetime.now()
later = now + timedelta(hours=3)
print(later)30分後を求める
from datetime import datetime, timedelta
now = datetime.now()
later = now + timedelta(minutes=30)
print(later)10秒後を求める
from datetime import datetime, timedelta
now = datetime.now()
later = now + timedelta(seconds=10)
print(later)複数の値を同時に指定することもできます。
from datetime import datetime, timedelta
now = datetime.now()
later = now + timedelta(
days=1,
hours=2,
minutes=30
)
print(later)この例では、現在日時から1日と2時間30分後の日時を計算しています。
曜日を取得する
weekday()を使用すると、曜日を数値で取得できます。
from datetime import datetime
now = datetime.now()
print(now.weekday())weekday()では、月曜日を0として曜日を表します。
| 数値 | 曜日 |
|---|---|
| 0 | 月曜日 |
| 1 | 火曜日 |
| 2 | 水曜日 |
| 3 | 木曜日 |
| 4 | 金曜日 |
| 5 | 土曜日 |
| 6 | 日曜日 |
曜日名を表示する場合は、リストを使用できます。
from datetime import datetime
weekdays = [
"月曜日",
"火曜日",
"水曜日",
"木曜日",
"金曜日",
"土曜日",
"日曜日"
]
now = datetime.now()
weekday_number = now.weekday()
print(weekdays[weekday_number])例えば、土曜日に実行した場合は、次のように表示されます。
土曜日
日付と曜日を一緒に表示することもできます。
from datetime import datetime
weekdays = [
"月曜日",
"火曜日",
"水曜日",
"木曜日",
"金曜日",
"土曜日",
"日曜日"
]
now = datetime.now()
date_text = now.strftime("%Y年%m月%d日")
weekday_text = weekdays[now.weekday()]
print(f"{date_text}は{weekday_text}です")実行結果の例は次のとおりです。
2026年07月18日は土曜日です
ここでは、第12回で説明したf文字列も使用しています。
ファイル名に日時を追加する
日付と時刻は、ファイル名を作成するときにもよく使用されます。
例えば、次のようなファイル名を作成できます。
log_20260718_143542.txt
プログラムは次のようになります。
from datetime import datetime
now = datetime.now()
file_name = now.strftime("log_%Y%m%d_%H%M%S.txt")
print(file_name)実行結果の例は次のとおりです。
log_20260718_143542.txt
年月日や時刻をファイル名に含めることで、ファイル名の重複を防ぎやすくなります。
実際にファイルを作成する場合は、次のように記述できます。
from datetime import datetime
now = datetime.now()
file_name = now.strftime("log_%Y%m%d_%H%M%S.txt")
with open(file_name, "w", encoding="utf-8") as file:
file.write("処理を開始しました")
print(file_name, "を作成しました")ファイル操作については、第11回で説明したwith open()を使用しています。
処理時刻を記録する
プログラムのログに処理時刻を記録する場合にも、datetimeを使用できます。
from datetime import datetime
now = datetime.now()
time_text = now.strftime("%Y/%m/%d %H:%M:%S")
print(f"[{time_text}] 処理を開始しました")実行結果の例は次のとおりです。
[2026/07/18 14:35:42] 処理を開始しました
ファイルにログを追記する場合は、次のように記述できます。
from datetime import datetime
now = datetime.now()
time_text = now.strftime("%Y/%m/%d %H:%M:%S")
with open("log.txt", "a", encoding="utf-8") as file:
file.write(f"[{time_text}] 処理を開始しました\n")ファイルを開くモードに"a"を指定すると、既存の内容を残したまま末尾に文章を追加できます。
datetimeを使ったサンプルプログラム
最後に、現在の日付、時刻、曜日を表示するプログラムを作成してみましょう。
from datetime import datetime
weekdays = [
"月曜日",
"火曜日",
"水曜日",
"木曜日",
"金曜日",
"土曜日",
"日曜日"
]
now = datetime.now()
date_text = now.strftime("%Y年%m月%d日")
time_text = now.strftime("%H時%M分%S秒")
weekday_text = weekdays[now.weekday()]
print("現在の日付:", date_text)
print("現在の時刻:", time_text)
print("今日の曜日:", weekday_text)実行結果の例は次のとおりです。
現在の日付: 2026年07月18日
現在の時刻: 14時35分42秒
今日の曜日: 土曜日
これまで学習した変数、リスト、f文字列などと組み合わせることで、日付や時刻を分かりやすく表示できます。
まとめ
今回は、datetimeモジュールを使って、Pythonで日付と時間を扱う方法を説明しました。
今回のポイントは次のとおりです。
datetime.now()で現在の日付と時刻を取得できるyear、month、dayなどで値を個別に取得できるstrftime()で日時を文字列に変換できるstrptime()で文字列を日時に変換できる- 日付同士を比較できる
- 日付同士を引き算して差を求められる
timedeltaで数日後や数時間後を計算できるweekday()で曜日を取得できる
特に、次のコードは非常によく使用します。
from datetime import datetime
print(datetime.now())表示形式を整える場合は、次のように記述します。
from datetime import datetime
now = datetime.now()
print(now.strftime("%Y/%m/%d %H:%M:%S"))datetimeは、ログの作成、ファイル名の生成、期限の判定、処理時間の記録など、さまざまなプログラムで使用されます。
最初からすべての書式コードを覚える必要はありません。
まずは、現在日時を取得するdatetime.now()と、表示形式を変更するstrftime()から使ってみましょう。


コメント