datetime.combineとは?
datetime.combineは、Pythonで日付を扱うdateオブジェクトと時間を扱うtimeオブジェクトを組み合わせて、日時を扱うdatetimeオブジェクトを作成するためのメソッドです 。
日常生活で、「12月25日」という日付の情報と、「午前10時」という時刻の情報を別々に持っているとします。この2つを「12月25日の午前10時」という一つの日時にまとめたい場合に datetime.combineが活躍します。
datetime.combineの特徴
- dateオブジェクト(日付)とtimeオブジェクト(時刻)を引数として渡す
- 2つの情報を統合したdatetimeオブジェクト(日時)を返す
- 別々に管理していた日付と時刻の情報を一つにまとめる際に役立つ
- ユーザーが入力した日付と時刻を処理するWebアプリケーションなどでよく利用される
【関連】
Pythonをもっと詳しく学ぶならpaizaラーニング
基本構文
datetime.combineは、日付を扱うdateオブジェクトを第一引数に、時刻を扱うtimeオブジェクトを第二引数に指定して使います。実行すると、2つが結合された新しいdatetimeオブジェクトが返されます。元のdateオブジェクトやtimeオブジェクト自体は変更されません。
まずは日付と時刻を別々に作成し、datetime.combineで結合する基本的な例を見てみましょう。
出力結果
2024-03-15 14:30:45この例では、date(2024, 3, 15) で作成した日付情報と time(14, 30, 45) で作成した時刻情報をdatetime.combineに渡しています。結果として、2つの情報が「2024-03-15 14:30:45」という一つのdatetimeオブジェクトにまとめられています。
以下はdate.today() を使って今日の日付を取得し、指定した時刻と結合する例です。
出力結果(例)
今日の朝9時: 2025-11-15 09:00:00※出力結果は実行した時刻により変動します。また、日付はUTC形式で計算されるため、日本時間での計算結果と異なる場合があります
この例では、まずdate.todayでプログラムを実行した当日の日付を取得しています。次に、time(9, 0, 0)で作成した午前9時の時刻情報とdatetime.combineで結合し、当日の特定の時刻を表すdatetimeオブジェクトを生成しています。
このように、日付と時刻を別々に定義してからdatetime.combineで一つにまとめるのが基本的な使い方です。前述したように引数の順番は決まっています。1番目にdateオブジェクト、2番目にtimeオブジェクトを指定する必要があるので注意しましょう。
実用例
ここでは、datetime.combineを実際のプログラムで活用する例を紹介します。イベント管理や勤怠記録など、実際の開発でよくある場面を想定した使い方を見ていきましょう。さまざまな用途でのサンプルコードを解説します。
イベントスケジュールの作成
イベントの開催日と開始時刻を別々に管理している場合に、datetime.combineを使って統合されたスケジュール情報を作成する例です。
出力結果
イベント開始: 2024-04-20 13:30:00
動物: ライオンの餌やりショーこの例では、date(2024, 4, 20)でイベント開催日を、time(13, 30)で開始時刻をそれぞれ定義しています。
datetime.combineを使うことで、「2024-04-20 13:30:00」というイベント開始日時を一つのdatetimeオブジェクトとして取得できました。イベント管理システムなどでよく使われる処理です。
勤怠管理システムでの時刻記録
勤怠管理システムで、出勤日と出勤時刻を組み合わせて、正確なタイムスタンプを作成する処理例です。
出力結果
出勤記録: 2024-03-18 08:45:30
担当者: ゾウの世話係この例では、出勤日work_dateと出勤時刻clock_in_timeをdatetime.combineで結合しています。
日付と時刻を統合することで「2024-03-18 08:45:30」という正確な出勤記録(タイムスタンプ)が作成されます。このように日時の形式を統一すると、データベースでの管理や後からの集計がしやすくなります。
予約システムでの日時指定
Webサイトの予約フォームなどで、ユーザーが日付と時刻を別々に選んだ場面を想定した、日時の結合処理の例です。
出力結果
予約日時: 2024-05-10 15:00:00
予約内容: パンダ見学ツアーこの例では、ユーザーが選択した日付reservation_dateと時刻reservation_timeをdatetime.combineで結合し、予約日時reservation_datetimeを作成しています。Webアプリケーションでは、日付ピッカーと時刻入力欄のように、ユーザー入力が別々になることが多いため、datetime.combineが役立ちます。
データベースからの情報復元
データベースに日付と時刻が別々の項目(カラム)として保存されている場合に、datetime.combineを使って一つの日時情報に復元する処理の例です。
出力結果
復元された日時: 2024-06-05 10:15:00
記録内容: トラの健康チェックこの例では、データベースから取得した日付db_dateと時刻db_timeをdatetime.combineで結合し、元の完全な日時情報restored_datetimeを復元しています。
古いシステムや設計の都合で日付と時刻が別々に保存されている場合でも、プログラム側で簡単に一つの日時データとして扱えるようになります。
繰り返し処理でのスケジュール生成
複数の日付に対してすべて同じ時刻を適用し、スケジュールリストを作成する例です。
出力結果
2024-07-01 16:30:00: キリンの餌やり時間
2024-07-08 16:30:00: キリンの餌やり時間
2024-07-15 16:30:00: キリンの餌やり時間この例では、for文を使ってdatesリストから日付を一つずつ取り出し、固定の時刻feeding_timeとdatetime.combineで結合しています。
リストの要素が3つあるため、3回処理が繰り返され、3つの異なる日付(7月1日、8日、15日)に同じ時刻が設定されたスケジュールが出力されています。
時間計算での基準点設定
datetime.combineで作成した日時を基準点として設定し、timedelta(時間の間隔)を使って経過時間を計算する例です。
出力結果
開始: 2024-08-01 09:00:00
終了: 2024-08-01 11:30:00
活動: サルの訓練セッションこの例では、まずdatetime.combineで「2024年8月1日の午前9時」という基準日時base_datetimeを作成しています。次にtimedelta(hours=2, minutes=30)で「2時間30分」という時間の長さを定義し、基準日時に足し算することで、終了時刻elapsed_timeを計算しています。
タイムゾーン対応での日時作成
timezoneオブジェクトを使ってタイムゾーン情報(ここでは日本標準時)を含む時刻timeオブジェクトを作成し、datetime.combineで日付と結合する、少し高度な使い方です。
出力結果
イベント日時: 2024-09-15 14:00:00+09:00
タイムゾーン: ペンギンパレードこの例では、timedelta(hours=9)で「協定世界時(UTC)との時差が+9時間」という日本標準時(JST)のタイムゾーン情報jstを作成しています。
time(14, 0, tzinfo=jst)のようにtzinfoにjstを指定することで、タイムゾーン情報を持った時刻オブジェクトができます。datetime.combineは、timeオブジェクトが持つタイムゾーン情報を引き継ぎ、出力結果の末尾に+09:00が付与されています。
国際的なアプリケーションでタイムゾーンを考慮した日時処理を行う際に重要な手法です。グローバルなシステムでの時刻管理に不可欠な機能となります。
まとめ
Pythonのdatetime.combineは、日付と時刻の情報を一つにまとめる便利なメソッドです。この記事では、基本的な構文から実際の活用例まで解説しました。
datetime.combineが活躍する場面は次のようなケースです。
datetime.combineが活躍する場面
- ユーザーが入力した日付と時刻をまとめるとき
- データベースに別々に保存された日付と時刻を結合するとき
- イベントや予約の正確な日時データを作るとき
datetime.combineを用いる上で、押さえておきたいポイントを覚えておきましょう。
重要なポイント
- 第一引数にdate、第二引数にtimeを指定する
- 元のdateやtimeオブジェクトは変更されない
- timeオブジェクトが持つタイムゾーン情報は引き継がれる
初めてPythonを学ぶ方も、この記事で紹介したdatetime.combineを実際に書いて、基本的な使い方を試してみてください。
Webフォームの入力処理やデータベースのデータ整理など、日付と時刻を別々に扱う場面はよくあります。
ぜひdatetime.combineをマスターして、日時データを自在に扱えるようになりましょう。