この連載では、Pythonについて色々な形で再学習に取り組んでいます。前回の記事はこちらになります。 hirocom777.hatenadiary.org
前回は日付と時間について取り組みました。Pythonでは、datetimeモジュールを使って日付と時間を扱います。
今回も日付と時間です。datetimeモジュールの応用方法について学びましょう。
当日の日付、現在の日時を取得
プログラムを組む際に、当日の日付や現在の日時を取得したいケースがよくあります。当日の日付の取得は、dateオブジェクトのtodayメソッドを使います。現在の日時の取得は、datetimeオブジェクトのnowメソッドを使います。
print(datetime.date.today()) # 2024-08-31(今日の日付)を返す print(datetime.datetime.now()) # 2024-08-31 09:34:09.677966(現在の日時)を返す
曜日の取得
日時(日付と時間)を表すdatetimeオブジェクトのweekdayメソッドで、曜日を表す整数値が得られます。月曜日が0で日曜日が6になります。dateオブジェクトにも同様のメソッドがあります。
print(datetime.datetime(2024,8,31).weekday()) # 5(土曜日)を返す
datetime型とdate型、time型との変換
datetime型からdate型、time型へ変換する場合は、それぞれdatetimeオブジェクトのdateメソッド、timeメソッドを使います。
dt = datetime.datetime(2024,8,31,15,7,30,10) print(dt.date()) # 2024-08-31 を返す print(type(dt.date())) # <class 'datetime.date'> を返す print(dt.time()) # 15:07:30.000010 を返す print(type(dt.time())) # <class 'datetime.time'> を返す
date型、time型からdatetime型へ変換するには、datetimeオブジェクトのcombineメソッドを使います。
d = datetime.date(2024,8,31) t = datetime.time(15,7,30,10) print(datetime.datetime.combine(d,t)) # 2024-08-31 15:07:30.000010 を返す
文字列との変換
datetime型から文字列型に変換するには、datetimeオブジェクトのstrftimeメソッドを使用します。変換する際には、書式を指定します。strftimeメソッドはdate型、time型にもあります。
dt = datetime.datetime(2024,8,31,15,7,30) d = dt.date() t = dt.time() print(dt.strftime('%Y/%m/%d %H:%M:%S')) # 2024/08/31 15:07:30 を返す print(d.strftime('%Y/%m/%d')) # 2024/08/31 を返す print(t.strftime('%H:%M:%S')) # 15:07:30 を返す
文字列型からdatetime型に変換するには、datetimeオブジェクトのstrptimeメソッドを使用します。
s = '2024/08/31 15:07:30' dt = datetime.datetime.strptime(s,'%Y/%m/%d %H:%M:%S') print(dt) # 2024-08-31 15:07:30 を返す print(type(dt)) # <class 'datetime.datetime'> を返す
以下に、strftimeメソッド、strptimeメソッドで書式を指定する代表的なコード一覧を示します。数値は0埋め表記になります。
書式コード | 意味 |
---|---|
%d | 日(2桁) |
%m | 月(2桁) |
%y | 西暦下2桁 |
%Y | 西暦4桁 |
%H | 時 (24時間表記) |
%I | 時 (12時間表記) |
%M | 分(2桁) |
%S | 秒(2桁) |
%f | マイクロ秒(6桁) |
%A | 曜日名 |
%a | 曜日名(短縮形) |
%B | 月名 |
%b | 月名(短縮形) |
次回は日時データの計算
いかがでしょうか。datetimeモジュールには便利な機能がありますね。日時データは生活に密着していて、色々な使用方法があります。次回は日時データの計算について見ていきたいと思います。