【Python】日付・時刻(datetime)の扱い方

プログラミング
Masa
Masa

こんにちは!Masaです。

今回はPythonにおける日付の扱い方について解説していきます。

この記事でわかること
  • Pythonの日付の扱い方
  • Pythonの日付の型の種類

Pythonの日付の型の種類は?

Pythonに限らず日付や時間を扱う場面って多いですよね。
ということで、今回はPythonの日付や時間を調べて解説していきます。

基本的にPythonで使用する日付のモジュールは”datetime”です。
”datetime”モジュールは日付や時刻を操作するためのクラスを定義しています。

datetimeモジュールで主に使用されるオブジェクトとして

  • 日付表現のdateオブジェクト
  • 時間表現のtimeオブジェクト
  • 日付と時間表現のdatetimeオブジェクト

の3種類があります。

” datetime”の使い方や概念を見ていきましょう!

NaiveとAwareの扱いについて

datetimeモジュールで扱う日時にはタイムゾーンを含んでいるものと含んでいないものがあります。
具体的には以下のようになります。

  • naive : タイムゾーンを含んでいない
  • aware : タイムゾーンを含んでいる

niaveはタイムゾーンなどを考慮しなくてよいため扱いが簡単になります。

naiveとawareの扱い方については以下の記事を参照ください。

Python Django datetime naiveとawareに関するエラーが出たとき
Pythonでdatetimeモジュールを使用すると必ず1回は引っかかるのが、実時間であるawareと時間表現だけのnaiveについて。typeerror: can't subtract offset-naive and offset-aware datetimes今回はawareとnaiveに関するエラーの対処法や変換方法の解説を行っています。

日付・時刻のフォーマット

datetimeオブジェクト等で取得した日時を文字列に変換するには”strftime関数”を使います。
出力時にどの部分を表示するかのフォーマット指定ができ、以下の指定方法で指定します。

※2022年9月21日13時25分30秒(水)を例に出力例を表示します

表示指定文字出力例
年(4桁表示)%Y2022
年(下2桁表示)%y22
月(2桁表示)%m09
月(英語省略表示)%bSep
月(英語表示)%BSeptember
日(一般的な日)%d21
日(1月1日からの経過日数)%j264
曜日(英語表示)%AWednesday
曜日(英語省略表示)%awed
時(24時間表示)%H13
時(12時間表示)%I
%M25
%S30
AM or PM%pPM
日付・時刻のフォーマット

また、文字列を日付や時間に戻す関数としてstrptime関数があります。

日時の取得・表示

実際の日時の取得や表示を行ってみましょう

任意の日時を指定する

任意の日時を表示させたい場合は以下のようにします。

import datetime

# datetime(year, month, day, hour, min, sec)
dt = datetime.datetime(2020, 5, 29, 13, 30, 58)
print(dt)
--出力--
2020-05-29 13:30:58

仮にsecを指定しなかった場合、sec部分は00秒となります。

現在の日時を取得・表示する

現在の日時を表示するにはいくつかの方法があります。

今回は、①現在の日時②現在の日付③現在の時刻を出力する3パターンを紹介します。

import datetime

# 現在の日時
now_datetime = datetime.datetime.today()
print(now_datetime)
# 出力
# 2022-09-21 14:25:57.198287

# 現在の年月日
now_date = now_datetime.date()
print(now_date)
# 出力
# 2022-09-21

# 現在の時刻
now_time = now_datetime.time()
print(now_time)
# 出力
# 14:31:15.787316

文字列を変換

日時を取得しても標準の形で出力すると見にくいですよね。

見やすいように日付を指定の文字列に変換する関数が”strftime関数”です。
使い方を見ていきましょう。

import datetime

# datetime(year, month, day, hour, min, sec)
dt = datetime.datetime(2020, 5, 29, 13, 30, 58)
print(dt)
# 出力
# 2020-05-29 13:30:58

# 〇〇〇〇年〇月〇日
print(dt.strftime('%Y年%m月%d日'))
# 出力
# 2020年05月29日

# 〇〇時〇〇分〇〇秒
print(dt.strftime('%H時%M分%S秒'))
# 出力
# 13時30分58秒

上記は基本的な使い方で、曜日やAM/PM表示なども行えます。
上記の日付・時刻のフォーマットを参考にして文字列を作成してください。

時間差の算出

2つの日時の差を知りたい場面もありますよね。
(例えば自分の誕生日が現在までの差など)

基本的な使い方は以下のような形です。

import datetime

# datetime(year, month, day, hour, min, sec)
dt1 = datetime.datetime(2020, 5, 29, 13, 30, 00)
dt2 = datetime.datetime(2020, 6, 29, 14, 0, 0)

dt_diff = dt2 - dt1
print(dt_diff)
# 出力
# 31 days, 0:30:00

特に難しいことはなく、2つのdatetimeを引き算することで算出できます。

もし日付だけ算出したければ以下のようにしてください

print(dt_diff.days)
# 出力
# 31

まとめ

今回はPythonにて日付・時刻を扱う”datetime”について解説しました。

”datetime”モジュールには主に3つのオブジェクトがあります。

  • 日付表現のdateオブジェクト
  • 時間表現のtimeオブジェクト
  • 日付と時間表現のdatetimeオブジェクト

これらをうまく活用し、日時を扱っていけるといいですね。

タイムゾーンを考えたりするともう少し複雑になるので、別記事で解説したいと思います。

コメント

タイトルとURLをコピーしました