【Python入門】datetimeモジュールで日付・時間を扱う方法について解説
Pythonで日時情報を扱う場合、標準ライブラリであるdatetime
モジュールを使用します。
datetime
内のクラスや関数を活用すれば、現在時刻を取得したり、文字列を日時操作できる形へ変換することが可能です。
この記事では、datetimeモジュールで日付や時刻を扱う方法について解説していきます。
datetimeモジュールの使い方
datetime
モジュールでは、主に以下の4つの操作を行うことができます。
- 指定した日時情報を作成する
- 現在の日時を取得する
- 日時で演算・比較を行う
- 日時⇔文字列に変換する
指定した日時情報を作成する
datetime
モジュールでは、日時情報を扱う際のデータ型として以下が用意されています。
型 | 内容 | 作成方法 |
---|---|---|
datetime | 日付・時刻の情報を保持 | datetime(年, 月, 日, 時, 分, 秒) |
date | 日付の情報を保持 | date(年, 月, 日, 時, 分, 秒) |
time | 時刻の情報を保持 | time(時, 分, 秒, ミリ秒) |
timedelta | 日付や時刻の差分を保持 (主に演算で使用) | timedelta(種別=数値) 種別は days やseconds などの単位を指定 |
作成したい日時データの種類に応じて、様々な形で値を作成することが可能です。
またdatetime
モジュールを使用する際は、内部のクラス・関数を呼び出す前にimport
文にて読み込みを行う必要があります。
import datetime as dt # 「datetime」モジュールを「dt」として読み込む
print(dt.datetime(2022, 2, 1, 8, 0, 0)) # datetime型(dtモジュール)で作成した値を表示
print(dt.date(2022, 2, 1)) # date型(dtモジュール)で作成した値を表示
print(dt.time(8, 0, 0)) # time型(dtモジュール)で作成した値を表示
print(dt.timedelta(days=3)) # timedelta型(dtモジュール)で作成した値を表示
= 実行結果 =
2022-02-01 08:00:00
2022-02-01
08:00:00
3 days, 0:00:00
現在の日時を取得する
現在の日時情報を取得する場合は、以下のメソッドを利用します。
メソッド | 対応しているデータ型 | 内容 |
---|---|---|
now() | ・datetime型 | 現在の日付・時刻情報を取得 |
today() | ・datetime型 ・date型 | 現在の日付情報を取得 |
now()
メソッドより時刻のみを取得したい場合は、さらにtime()
メソッドにて変換を行う必要があります。
import datetime as dt # 「datetime」モジュールを「dt」として読み込む
print(dt.datetime.now()) # datetime型にて現在日付・時刻を取得して表示
print(dt.date.today()) # date型にて現在の日付を取得して表示
print(dt.datetime.now().time()) # now()メソッドの結果に対して、時刻を取得して表示
= 実行結果 =
2022-02-08 20:10:37.684202
2022-02-08
日時で演算・比較を行う
datetime
モジュールで作成した日時データを使って、計算を行うことも可能です。
演算 | 結果 | 例 |
---|---|---|
同じデータ型での引き算 | timedelta型 | datetime型 – datetime型 = timedelta型 |
timedelta型による足し算 | 元データ型 | date型 + timedelta型 = date型 |
timedelta型による引き算 | 元データ型 | time型 – timedelta型 = time型 |
同じデータ型での比較 | bool型 | datetime型 < datetime型 = bool型 |
同じデータ型での引き算なら双方の差分が、timedelta型(差分)を用いた演算であれば結果となる日時データが返されます。
また、日時データ同士を比較した場合は、記述式が合っているかどうかをTrue
またはFalse
で確認できます。
import datetime as dt # 「datetime」モジュールを「dt」として読み込む
dt_a = dt.date(2022, 2, 1) # dt_aという変数にて、日付データを保持
dt_b = dt.date(2022, 2, 7) # dt_bという変数にて、日付データを保持
td = dt.timedelta(days=3) # tdという変数にて、差分データを保持
print(dt_b - dt_a) # date型同士の引き算の結果を表示
print(dt_a + td) # timedelta型による足し算の結果を表示
print(dt_b + td) # timedelta型による引き算の結果を表示
print(dt_a > dt_b) # dt_aとdt_bの比較結果が正しいかどうかを表示
= 実行結果 =
6 days, 0:00:00
2022-02-04
2022-02-10
False
日時⇔文字列に変換する
datetime
モジュールでは、作成した日付情報をstr型(文字列)に変換したり、あるいはその逆に関しても対応可能です。
メソッド | 内容 | 変換方法 |
---|---|---|
strftime() | 各データ型⇒文字列に変換 | 日時情報.strftime(日時フォーマット) |
strptime() | 文字列⇒datetime型に変換 | datetime.strftime(文字列, 日時フォーマット) |
strftime()
の場合はどのような形式の文字列に変換するか、strptime()
の場合は変換対象となる文字列がどのような形式になっているかを「日時フォーマット」として括弧()内に記述します。
変換する際は、指定したフォーマットをもとにそれぞれ適切な型へ書き換える形になります。
import datetime as dt # 「datetime」モジュールを「dt」として読み込む
dt_today = dt.date(2022, 2, 1) # dt_todayという変数にて、date型の日時情報を保持
word = "18/05/19 18時59分59秒" # wordという変数にて、文字列を保持
print(dt_today.strftime("%Y年%m月%d日")) # dtを文字列に変換して表示
print(dt.datetime.strptime(word, "%y/%m/%d %H時%M分%S秒")) # wordをdatetime型に変換して表示
= 実行結果 =
2022年02月01日
2018-05-19 18:59:59
まとめ
この記事では、datetimeモジュールで日付や時刻を扱う方法について解説しました。
データ型に応じて、使えるメソッドや演算方法が異なっていたりと、プログラミング初心者にとっては少し複雑に感じてしまうかもしれません。
Pythonを扱う上では出番の多いモジュールになりますので、少しずつ使い慣れていくようにしましょう。