元セブ島在住のエンジニアの僕「Tommy」が、プログラミング・英語・セブ事情を発信するブログ

Tommy's blog

【Python】日付と時間を計算する【→プログラミング初心者向け】

11月 13, 2019

プログラム女子
ある日のある時間に処理を開始したい場合は、どうプログラミングすればいいですか?
いろいろな方法があるけど、現在の時間と目的の時間を差の時間を測る方法があるよ。今回はPythonの時間が扱い方について説明するね。
Tommy

この記事で分かること

  • Pythonプログラミングで日付と時間を変数で扱う方法が分かる
  • 日付と時間を変数で扱わないといけない状況(シーン)が分かる

Pythonで日付と時間を計算する概要

この記事では、Pythonで経過時間や日時を取得して、日付と時間を計算する方法、サンプルプログラムを使いながら説明します。

日付と時間を扱うことができると、例えば、現在の時間から数時間後に処理を実行できたり、「データとしての日時」が一致した時にだけ処理を実行するなど、日時での条件比較ができるようになります。

Pythonで日付と時間を計算する前提環境

経過時間や日時を測る前提の環境は、下の記事で説明している私の環境と同じ環境で確認しています。

また、レンタルサーバなどのLinuxサーバを使っている場合は、下の記事でプログラミングする環境の作り方を説明しています。

もし、まだプログラムする環境ができていない方は、先にこちらの記事を読んで、プログラミングできる環境をつくることをおすすめします。

Pythonで日付と時間を計算するサンプルプログラム

ここでは、下記のような3つのサンプルプログラムを説明して、Pythonのプログラムにおける日付の扱い方を説明します。

現在の日付と時間の取得するサンプルプログラムの作成

日付の扱い方を学ぶために、現在から指定日までの残り時間を計算するサンプルプログラムを作成します。サンプルプログラムは次のような順番で説明します。

  1. ライブラリのインポート

  2. 現在の日付と時間の取得する関数の定義

  3. 現在の日付と時間の取得する関数の呼び出し

  4. 現在の日付と時間の取得する関数の実行結果

  5. 指定された日付と時間を取得する関数の定義

  6. 指定された日付と時間を取得する関数の呼び出し

  7. 指定された日付と時間を取得する関数の実行結果

  8. 現在から指定日までの残り時間を計算する処理

1.ライブラリのインポート

まず初めに、ライブラリのインポートを行います。今回は、日時を扱うdatetimeライブラリをインポートしています。

import datetime

「datetime」をインポートする。

2.現在の日付と時間の取得する関数の定義

次に、現在のtimedeltaオブジェクトを返す関数「get_current_time」を定義します。

def get_current_time():

	dt = datetime.datetime.now()
	return dt

  1. 関数「get_current_time」を定義宣言する。
  2. 変数「dt」を「datetime」ライブラリの「datetime.now」関数の戻り値で初期化する。
  3. 変数「dt」を返却する。

3.現在の日付と時間の取得する関数の呼び出し

ここでは、現在日時を取得する為に、関数「get_current_time」をコールしています。

if __name__ == '__main__':

	dt0 = get_current_time()
	print(dt0)

  1. 変数「dt0」を関数「get_current_time」の戻り値で初期化する。
  2. 変数「dt0」の内容を表示する。

4.現在の日付と時間の取得する関数の実行結果

上記の関数「get_current_time」を呼び出して変数「dt0」の内容を表示した結果は下のようになります。現在の日付と時間が表示されていることがわかります。

2019-11-12 14:26:17.455150

5.指定された日付と時間を取得する関数の定義

ここでは、指定された日時を元にその日時のtimedeltaオブジェクトを返却する関数「make_time_delta」を定義しています。

def make_time_delta(year,month,day,hour):

	dt = datetime.datetime(year=year, month=month, day=day, hour=hour)
	return dt

  1. 関数「make_time_delta」を定義宣言する。
  2. 変数「dt」を引数で指定された「year」「month」「hour」でライブラリ「datetime」の関数「datetime」の戻り値で初期化する。
  3. 変数「dt」の値を戻す。

6.指定された日付と時間を取得する関数の呼び出し

ここでは、指定日の日時を取得するために関数「make_time_delta」を呼び出します。その際、日付指定を2019/10/10の15時を指定しました。

if __name__ == '__main__':

	dt1 = make_time_delta(year=2019, month=10, day=10, hour=15)
	print(dt1)

  1. 変数「dt1」を定義宣言する。
  2. 引数で指定された「year」「month」「hour」でライブラリ「datetime」の関数「datetime」を呼び出し、その戻り値で変数「dt」を初期化する。
  3. 変数「dt」の値を戻す。

7.指定された日付と時間を取得する関数の実行結果

下の結果は、指定された日付と時間の変数「dt1」を作成し、その変数「dt1」を表示した結果です。2019年の10月10日の15時を指定したので、その日時が表示されていることが分かります。

2019-10-10 15:00:00

8.現在から指定日までの残り時間を計算する処理

ここでは、2つの指定日の日時との差異(残り期間)を測るために、まず2つの日時指定で関数「make_time_delta」をコールします。その後、両者の「timedelta」オブジェクト同士の引き算を行うことによって、2つの指定日の差異(残り期間)を計算することができます。

if __name__ == '__main__':

 	dt1 = make_time_delta(year=2019, month=10, day=10, hour=15)
	dt2 = make_time_delta(year=2020, month=1, day=1, hour=12)
	dt3 = abs(dt1-dt2)
	print(dt3)

  1. 2019年10月10日15時を指定して、関数「make_time_delta」を呼び出し、変数「dt1」を初期化する。
  2. 2020年1月1日12時を指定して、関数「make_time_delta」を呼び出し、変数「dt2」を初期化する。
  3. 変数「dt1」から変数「dt2」までの期間を変数「dt3」を初期化する。
  4. 変数「dt3」の内容を表示する。

現在から指定日までの残り時間を計算する処理の実行結果

2つの指定した日時dt1とdt2を引き算して、dt1からdt2までの残り時間(dt3)を計算した結果が下記の結果になります。82日と21時間となっており、正しく計算できていることが分かります。

  • dt1:2019年10月10日15時
  • dt2:2020年1月1日12時
82 days, 21:00:00