【Python】datetimeで時間だけ取得・計算する方法を解説

Pythonのdatetimeモジュールを使うと、時間の取得や計算、フォーマットが簡単にできます。

この記事では、現在の時間を取得する方法、特定の時間を設定する方法、時間の加算・減算、時間の差を計算する方法、そして時間のフォーマット方法について詳しく解説します。

目次から探す

時間だけを取得する方法

Pythonのdatetimeモジュールを使うことで、現在の時間を取得したり、特定の時間を設定したりすることができます。

ここでは、時間だけを取得する方法について詳しく解説します。

現在の時間を取得する

まずは、現在の時間を取得する方法について見ていきましょう。

datetime.now()の使い方

datetime.now()を使うと、現在の日時を取得することができます。

以下のコード例を見てください。

from datetime import datetime
# 現在の日時を取得
now = datetime.now()
print(now)

このコードを実行すると、以下のような出力が得られます。

2023-10-01 12:34:56.789123

このように、datetime.now()を使うと、現在の年、月、日、時、分、秒、マイクロ秒まで含まれた日時が取得できます。

timeオブジェクトの取得

次に、datetimeオブジェクトから時間だけを取得する方法を見てみましょう。

datetimeオブジェクトにはtime()メソッドがあり、これを使うと時間部分だけを取り出すことができます。

from datetime import datetime
# 現在の日時を取得
now = datetime.now()
# 時間部分だけを取得
current_time = now.time()
print(current_time)

このコードを実行すると、以下のような出力が得られます。

12:34:56.789123

このように、datetimeオブジェクトのtime()メソッドを使うことで、時間部分だけを簡単に取得することができます。

特定の時間を設定する

次に、特定の時間を設定する方法について見ていきましょう。

datetime.time()の使い方

datetime.time()を使うと、特定の時間を設定することができます。

以下のコード例を見てください。

from datetime import time
# 特定の時間を設定
specific_time = time(14, 30, 0)
print(specific_time)

このコードを実行すると、以下のような出力が得られます。

14:30:00

このように、datetime.time()を使うと、時、分、秒を指定して特定の時間を設定することができます。

timeオブジェクトの属性

timeオブジェクトには、時、分、秒、マイクロ秒を取得するための属性があります。

以下のコード例を見てください。

from datetime import time
# 特定の時間を設定
specific_time = time(14, 30, 45, 123456)
# 各属性を取得
hour = specific_time.hour
minute = specific_time.minute
second = specific_time.second
microsecond = specific_time.microsecond
print(f"Hour: {hour}, Minute: {minute}, Second: {second}, Microsecond: {microsecond}")

このコードを実行すると、以下のような出力が得られます。

Hour: 14, Minute: 30, Second: 45, Microsecond: 123456

このように、timeオブジェクトの各属性を使うことで、設定した時間の各部分を簡単に取得することができます。

以上が、Pythonのdatetimeモジュールを使って時間だけを取得・設定する方法です。

次のセクションでは、時間の計算方法について詳しく見ていきます。

時間の計算方法

Pythonのdatetimeモジュールを使うと、時間の計算も簡単に行うことができます。

ここでは、時間の加算・減算や時間の差を計算する方法について詳しく解説します。

timedeltaを使った時間の加算・減算

timedeltaの基本

timedeltaは、時間の差を表すためのクラスです。

これを使うことで、時間の加算や減算が簡単に行えます。

timedeltaは、日、秒、マイクロ秒、ミリ秒、分、時間、週間などの単位で時間を指定できます。

from datetime import timedelta
# 1日と2時間のtimedeltaオブジェクトを作成
delta = timedelta(days=1, hours=2)
print(delta)  # 出力: 1 day, 2:00:00

時間の加算

timedeltaを使って時間を加算する方法を見てみましょう。

datetimeオブジェクトにtimedeltaを加えることで、指定した時間だけ加算された新しいdatetimeオブジェクトが得られます。

from datetime import datetime, timedelta
# 現在の日時を取得
now = datetime.now()
print("現在の日時:", now)
# 2時間後の日時を計算
two_hours_later = now + timedelta(hours=2)
print("2時間後の日時:", two_hours_later)

時間の減算

同様に、timedeltaを使って時間を減算することもできます。

datetimeオブジェクトからtimedeltaを引くことで、指定した時間だけ減算された新しいdatetimeオブジェクトが得られます。

from datetime import datetime, timedelta
# 現在の日時を取得
now = datetime.now()
print("現在の日時:", now)
# 3時間前の日時を計算
three_hours_ago = now - timedelta(hours=3)
print("3時間前の日時:", three_hours_ago)

時間の差を計算する

datetimeオブジェクトの差分

2つのdatetimeオブジェクトの差を計算することで、時間の差を求めることができます。

この差はtimedeltaオブジェクトとして返されます。

from datetime import datetime
# 2つの日時を設定
datetime1 = datetime(2023, 10, 1, 12, 0, 0)
datetime2 = datetime(2023, 10, 1, 15, 30, 0)
# 差を計算
difference = datetime2 - datetime1
print("時間の差:", difference)  # 出力: 3:30:00

timeオブジェクトの差分

timeオブジェクト同士の差分を直接計算することはできませんが、datetimeオブジェクトに変換してから差分を計算することができます。

from datetime import datetime, time, timedelta
# 2つのtimeオブジェクトを設定
time1 = time(9, 0, 0)
time2 = time(17, 30, 0)
# 同じ日付のdatetimeオブジェクトに変換
datetime1 = datetime.combine(datetime.today(), time1)
datetime2 = datetime.combine(datetime.today(), time2)
# 差を計算
difference = datetime2 - datetime1
print("時間の差:", difference)  # 出力: 8:30:00

このように、datetimeモジュールを使うことで、時間の加算・減算や差分の計算が簡単に行えます。

次に、時間のフォーマットについて解説します。

時間のフォーマット

Pythonのdatetimeモジュールを使うと、時間のフォーマットを自由に変更することができます。

ここでは、strftimestrptimeという2つの関数を使って、時間のフォーマットを変更する方法を解説します。

strftimeを使った時間のフォーマット

strftimeの基本

strftimeは、datetimeオブジェクトを文字列に変換するための関数です。

この関数を使うことで、時間を任意のフォーマットで表示することができます。

以下は基本的な使い方の例です。

from datetime import datetime
# 現在の日時を取得
now = datetime.now()
# strftimeを使ってフォーマットを指定
formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_time)  # 例: 2023-10-01 14:30:00

上記のコードでは、%Yが年、%mが月、%dが日、%Hが時、%Mが分、%Sが秒を表しています。

よく使うフォーマット例

strftimeでは多くのフォーマット指定子が用意されています。

以下にいくつかのよく使うフォーマット例を示します。

フォーマット指定子説明
%Y4桁の年2023
%m2桁の月01
%d2桁の日01
%H24時間制の時14
%M30
%S00
%A曜日(英語)Sunday
%a曜日(短縮形)Sun
%B月(英語)October
%b月(短縮形)Oct

例えば、曜日や月の名前を含めたフォーマットにしたい場合は以下のようにします。

formatted_time = now.strftime("%A, %B %d, %Y %H:%M:%S")
print(formatted_time)  # 例: Sunday, October 01, 2023 14:30:00

strptimeを使った文字列からの変換

strptimeの基本

strptimeは、文字列をdatetimeオブジェクトに変換するための関数です。

これにより、特定のフォーマットで表現された文字列をdatetimeオブジェクトに変換することができます。

以下は基本的な使い方の例です。

from datetime import datetime
# 文字列をdatetimeオブジェクトに変換
date_string = "2023-10-01 14:30:00"
date_object = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
print(date_object)  # 例: 2023-10-01 14:30:00

文字列からtimeオブジェクトへの変換

strptimeを使って、文字列からtimeオブジェクトに変換することも可能です。

以下はその例です。

from datetime import datetime
# 文字列をtimeオブジェクトに変換
time_string = "14:30:00"
time_object = datetime.strptime(time_string, "%H:%M:%S").time()
print(time_object)  # 例: 14:30:00

このようにして、文字列から直接timeオブジェクトを取得することができます。

これにより、時間だけを扱う場合にも便利です。

以上が、strftimestrptimeを使った時間のフォーマット方法です。

これらの関数を使いこなすことで、時間の表示や変換が非常に柔軟に行えるようになります。

実践例

ここでは、datetimeモジュールを使った実践的な例を紹介します。

具体的には、アラーム機能の実装と作業時間の計測について解説します。

アラーム機能の実装

アラーム機能を実装するためには、現在の時間と設定した時間を比較し、条件が満たされた場合にアラームをトリガーする必要があります。

現在の時間と設定時間の比較

まず、現在の時間を取得し、設定した時間と比較する方法を見てみましょう。

from datetime import datetime, time
# 現在の時間を取得
now = datetime.now().time()
# 設定した時間を定義
alarm_time = time(14, 30)  # 14:30にアラームを設定
# 現在の時間と設定時間を比較
if now >= alarm_time:
    print("アラームの時間です!")
else:
    print("まだアラームの時間ではありません。")

このコードでは、現在の時間を取得し、設定した時間と比較しています。

現在の時間が設定した時間以上であれば、アラームをトリガーするメッセージを表示します。

アラームのトリガー

次に、アラームをトリガーするための具体的な方法を見てみましょう。

ここでは、シンプルな例として、アラームの時間になったらメッセージを表示する方法を紹介します。

import time
from datetime import datetime
# アラームの時間を設定
alarm_time = datetime.strptime("14:30", "%H:%M").time()
while True:
    # 現在の時間を取得
    now = datetime.now().time()
    
    # 現在の時間と設定時間を比較
    if now >= alarm_time:
        print("アラームの時間です!")
        break  # アラームをトリガーしたらループを終了
    
    # 1秒待機
    time.sleep(1)

このコードでは、無限ループを使って現在の時間を定期的にチェックし、設定した時間になったらアラームをトリガーします。

アラームをトリガーした後はループを終了します。

作業時間の計測

次に、作業時間を計測する方法について解説します。

作業時間の計測には、開始時間と終了時間を記録し、その差を計算する必要があります。

開始時間と終了時間の記録

まず、作業の開始時間と終了時間を記録する方法を見てみましょう。

from datetime import datetime
# 作業の開始時間を記録
start_time = datetime.now()
print(f"作業開始時間: {start_time}")
# ここで作業を行う(例として5秒待機)
import time
time.sleep(5)
# 作業の終了時間を記録
end_time = datetime.now()
print(f"作業終了時間: {end_time}")

このコードでは、作業の開始時間と終了時間を記録しています。

実際の作業の代わりに、5秒間待機することで作業時間をシミュレートしています。

経過時間の計算

最後に、開始時間と終了時間の差を計算して、経過時間を求める方法を見てみましょう。

from datetime import datetime
# 作業の開始時間を記録
start_time = datetime.now()
# ここで作業を行う(例として5秒待機)
import time
time.sleep(5)
# 作業の終了時間を記録
end_time = datetime.now()
# 経過時間を計算
elapsed_time = end_time - start_time
print(f"経過時間: {elapsed_time}")

このコードでは、開始時間と終了時間の差を計算し、経過時間を表示しています。

経過時間はtimedeltaオブジェクトとして取得され、日、秒、マイクロ秒単位で表示されます。

以上が、datetimeモジュールを使ったアラーム機能の実装と作業時間の計測の方法です。

これらの例を参考にして、さまざまな時間に関する機能を実装してみてください。

目次から探す