Pythonで開発や分析をしていると、必ず登場するのが「日付」と「時刻」の扱いです。ログの記録、ファイル名にタイムスタンプを付ける、データ分析で日付を基準にグルーピングする、など活用シーンは無数にあります。
datetimeモジュールは、時刻の取得・日付計算・フォーマット変換・タイムゾーン対応など、日常的に使う日時処理を1つのモジュールで完結できます。
例えば、
- 今日から1週間後・1か月前の日付を求めたい
- 2つの日付の差(日数・時間)を知りたい
- タイムゾーンを考慮したグローバルなアプリを作りたい
といったニーズにすべて応えてくれるのがdatetimeです。
この記事では、Python標準ライブラリのdatetimeモジュールを使って「日付」と「時刻」を扱う方法を、Python初心者でも迷わず使えるよう、基本から応用までを体系的に解説していきます。
この記事でわかること
- datetimeモジュールの基本構造
- 日付・時刻の取得・表示・変換方法
- timedeltaによる時間計算
- 実務で役立つ応用例(ログ処理、スケジューリングなど)
- よくあるエラーとその対処法
目次
datetimeモジュールとは
Pythonのdatetimeモジュールは、日付や時刻を扱うための標準ライブラリです。外部パッケージをインストールする必要がなく、すぐに使えるのが魅力です。
import datetime
このモジュールには、以下のような主要クラスが含まれています
クラス名 | 役割 |
datetime.date | 年・月・日を扱う |
datetime.time | 時・分・秒を扱う |
datetime.datetime | 日付+時刻をまとめて |
datetime.timedelta | 時間の差分を表現する |
現在の日付・時刻を取得する方法
最も基本的な使い方は、現在の日時を取得することです。
from datetime import datetime
now = datetime.now()
print(now) # 2025-09-10 22:22:00.123456
datetime.now()で現在の日時を取得できます。ミリ秒まで扱えるためログ出力などに便利です。
日付だけを取得したい場合
today = datetime.today().date()
print(today) # 2025-09-10
date.today()で日付部分だけを取得可能です。
時刻だけを取得したい場合
current_time = datetime.now().time()
print(current_time) # 22:22:00.123456
西暦・月・日・時・分・秒を引数に与えて任意の日時オブジェクトを作成できます。
日付・時刻のフォーマット変換(strftime / strptime)
Pythonでは、日付や時刻を文字列に変換したり、逆に文字列から日時オブジェクトを生成することができます。
strftimeメソッドで自由なフォーマットに整形できます。
例:
- %Y:西暦4桁
- %m:月(01〜12)
- %d:日
- %H:時(24時間制)
- %M:分
- %S:秒
文字列 → datetime
日付を文字列に変換(strftime)
formatted = now.strftime(‘%Y/%m/%d %H:%M:%S’)
print(formatted) # 2025/09/10 22:22:00
文字列を日付に変換(strptime)
date_str = ‘2025-09-10 22:22:00’
parsed = datetime.strptime(date_str, ‘%Y-%m-%d %H:%M:%S’)
print(parsed) # datetimeオブジェクトとして扱える
strptimeを使えば文字列からdatetimeオブジェクトを作成できます。データ分析でCSVから読み込んだ日付を変換する際に便利です。
日付の加算・減算(timedelta)
timedeltaを使えば、日付や時刻の計算が簡単にできます。
1週間後の日付を取得
from datetime import timedelta
one_week_later = now + timedelta(days=7)
print(one_week_later)
3時間前の時刻を取得
three_hours_ago = now – timedelta(hours=3)
print(three_hours_ago)
delta.daysで日数差を簡単に取得可能です。
タイムゾーンを扱う
Python 3.9以降ではzoneinfoが標準搭載され、タイムゾーンの扱いがより簡単になりました。
from datetime import datetime
from zoneinfo import ZoneInfo
dt_tokyo = datetime.now(ZoneInfo(‘Asia/Tokyo’))
dt_utc = datetime.now(ZoneInfo(‘UTC’))
print(dt_tokyo)
print(dt_utc)
ログや海外サービス連携ではUTC基準で記録し、表示時にローカルタイムに変換する運用が一般的です。
実務で役立つ応用例
ログファイルのタイムスタンプ処理
ログの記録に日時を付けることで、後からの分析が容易になります。
def log_message(message):
timestamp = datetime.now().strftime(‘%Y-%m-%d %H:%M:%S’)
print(f'[{timestamp}] {message}’)
log_message(“処理が完了しました”)
スケジュール管理アプリでの活用
ユーザーが指定した日付から、次回の予定を自動計算する例
def next_meeting(date_str):
base_date = datetime.strptime(date_str, ‘%Y-%m-%d’)
next_date = base_date + timedelta(days=14)
return next_date.strftime(‘%Y-%m-%d’)
print(next_meeting(‘2025-09-10’)) # 2025-09-24
よくあるエラーと対処法
‘TypeError: unsupported operand type(s)’
日付と文字列を直接足そうとするとエラーになります。datetime型とstr型は互換性がないため、strptimeで変換してから操作しましょう。
‘ValueError: time data does not match format’
strptimeのフォーマットが文字列と一致していないと発生します。フォーマット指定子(例:`%Y-%m-%d`)が正しいか確認しましょう。
機械学習との関連性
機械学習では、時系列データの前処理にdatetimeモジュールが頻繁に使われます。
例:
- センサーデータのタイムスタンプ処理
- 時間帯による特徴量の抽出(例:朝・昼・夜)
- 予測モデルにおける季節性の考慮
df[‘hour’] = df[‘timestamp’].dt.hour
df[‘weekday’] = df[‘timestamp’].dt.weekday
このように、datetimeは単なる日付操作以上に、データの意味を引き出す重要なツールです。
まとめ
Pythonのdatetimeモジュールは、初心者でも扱いやすく、実務でも非常に役立つ機能が詰まっています。日付や時刻の取得、変換、計算、そして応用まで、幅広い場面で活躍します。
機械学習やデータ分析を志す方はもちろん、日常的なスクリプト作成でも必須の知識です。まずは基本操作から始めて、少しずつ応用力を高めていきましょう!
また、「自社システムに日付処理を組み込みたい」「データ分析を効率化したい」といった 開発のご相談 があれば、ぜひ3ink までお問い合わせください。実務に即した最適なソリューションをご提案いたします。