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

Pythonのdatetimeモジュールは日付や時刻を扱うための便利な機能を提供しています。

しかし、時々、日付や時刻の中から特定の情報だけを取り出したいことがあります。

今回は、datetimeオブジェクトから時間だけを取得し、それを文字列に変換する方法を解説します。

目次から探す

datetimeオブジェクトから時間を取得する方法

Pythonのdatetimeモジュールを使って、日付や時刻を扱うことができます。

この記事では、datetimeオブジェクトから時間だけを取得し、文字列に変換する方法を解説します。

timeオブジェクトの取得

datetimeオブジェクトから時間だけを取得するには、timeオブジェクトを使います。

timeオブジェクトは、時間、分、秒、マイクロ秒を表すことができます。

datetimeオブジェクトのtimeメソッド

datetimeオブジェクトには、timeメソッドが用意されています。

このメソッドを使って、datetimeオブジェクトからtimeオブジェクトを取得できます。


from datetime import datetime
# 現在の日時を取得
now = datetime.now()
# 時間だけを取得
time = now.time()
print(time)
12:34:56.789012

timeオブジェクトの属性

timeオブジェクトには、以下の属性があります。

  • hour: 時間 (0~23)
  • minute: 分 (0~59)
  • second: 秒 (0~59)
  • microsecond: マイクロ秒 (0~999999)

これらの属性を使って、時間の各要素にアクセスできます。


print("時間:", time.hour)
print("分:", time.minute)
print("秒:", time.second)
print("マイクロ秒:", time.microsecond)
時間: 12
分: 34
秒: 56
マイクロ秒: 789012

時間の文字列への変換

timeオブジェクトを文字列に変換するには、strftimeメソッドを使います。

strftimeメソッドの使用

strftimeメソッドは、指定したフォーマットに従って、timeオブジェクトを文字列に変換します。


# 時間を文字列に変換
time_str = time.strftime("%H:%M:%S")
print(time_str)
12:34:56

文字列フォーマットのカスタマイズ

strftimeメソッドで使用できるフォーマット指定子は以下の通りです。

  • %H: 時間 (00~23)
  • %I: 時間 (01~12)
  • %M: 分 (00~59)
  • %S: 秒 (00~59)
  • %f: マイクロ秒 (000000~999999)

これらの指定子を組み合わせて、任意のフォーマットの文字列を作成できます。


# 時間を12時間制で表示
time_str = time.strftime("%I:%M:%S %p")
print(time_str)
12:34:56 PM

このようにフォーマットを指定することで、datetimeオブジェクトから時間だけを取得し、好きな形式の文字列に変換することができます。

実践例: datetimeから時間だけを取得して文字列にする

これまでに学んだ知識を使って、実際にdatetimeオブジェクトから時間だけを取得し、文字列に変換する方法をいくつかの例で見ていきましょう。

現在時刻から時間を取得する例

まずは、現在時刻から時間だけを取得して文字列に変換する例を見ていきます。


from datetime import datetime
# 現在時刻を取得
now = datetime.now()
# 時間だけを取得して文字列に変換
time_str = now.strftime("%H:%M:%S")
print("現在時刻の時間部分:", time_str)

このコードでは、 datetime.now() 関数を使って現在時刻を取得し、strftimeメソッドを使って時間だけを取得して文字列に変換しています。

実行結果は以下のようになります。

現在時刻の時間部分: 12:34:56

特定の日時から時間を取得する例

次に、特定の日時から時間だけを取得して文字列に変換する例を見ていきます。


from datetime import datetime
# 特定の日時を設定
dt = datetime(2022, 1, 1, 15, 30, 45)
# 時間だけを取得して文字列に変換
time_str = dt.strftime("%H:%M:%S")
print("特定日時の時間部分:", time_str)

このコードでは、datetimeオブジェクトを特定の日時で初期化し、strftimeメソッドを使って時間だけを取得して文字列に変換しています。

実行結果は以下のようになります。

特定日時の時間部分: 15:30:45

タイムゾーンを考慮した時間取得の例

最後に、タイムゾーンを考慮した時間取得の例を見ていきます。


from datetime import datetime
import pytz
# タイムゾーンを設定
tz_tokyo = pytz.timezone("Asia/Tokyo")
tz_new_york = pytz.timezone("America/New_York")
# 現在時刻を取得
now = datetime.now(tz_tokyo)
# タイムゾーンを変換
now_new_york = now.astimezone(tz_new_york)
# 時間だけを取得して文字列に変換
time_str_tokyo = now.strftime("%H:%M:%S")
time_str_new_york = now_new_york.strftime("%H:%M:%S")
print("東京の現在時刻の時間部分:", time_str_tokyo)
print("ニューヨークの現在時刻の時間部分:", time_str_new_york)

このコードでは、pytzライブラリを使ってタイムゾーンをアメリカのニューヨークに設定し、astimezoneメソッドを使ってタイムゾーンを変換しています。

その後、strftimeメソッドを使って時間だけを取得して文字列に変換しています。

実行結果は以下のようになります。

東京の現在時刻の時間部分: 12:34:56
ニューヨークの現在時刻の時間部分: 23:34:56

このようにすることでタイムゾーンを反映した時間を取得することも可能です。現在時刻を取得して再計算する必要はありません。

これらの知識を活用して、さまざまな日時処理を行ってみましょう。

目次から探す