【Python入門】日付を使う方法まとめ!(フォーマット/比較/計算)

Python Python

Pythonで日付を使う方法についてまとめました。
Pythonで現在日付を取得したり、日付を加算・減算するにはdatetimeモジュールを使うと良いです。

datetimeモジュールについては、公式ドキュメントのこちらに記載があります。
載せているコードについてはPythonの3.11.0バージョンで動作確認しました。

現在の日時(年月日・時分秒)を取得する

現在の日時を取得したい場合には、datetimeモジュールのdatetimeオブジェクトからnowメソッドを呼び出します。

import datetime

print(datetime.datetime.now()) # 2022-12-04 20:45:59.427198

最初にdatetimeモジュールをimportしました。
datetimeモジュールのdatetimeオブジェクトからnowメソッドを呼び出しました。

print関数で出力すると「2022-12-04 20:45:59.427198」というように、日時を取得することができました。
出力内容は年月日・時分秒とマイクロ秒です。
取得した値については、strftimeメソッドを使うことでフォーマットできます。(詳しくは後述しています。)

例えば、下記のようにフォーマットすると、月・日・時間・分を取得することができます。

import datetime

nowDate = datetime.datetime.now()
print(nowDate.strftime('%m月%d日 %H時%M分')) # 12月04日 20時55分

nowDate変数にnowメソッドから取得したdatetimeオブジェクトを代入しました。
その後にstrftimeメソッドを呼び出してフォーマットしています。
結果「12月04日 20時55分」が出力されました。

現在の日付(年月日)を取得する

現在の日付を取得したいときには、datetimeモジュールのdateオブジェクトからtodayメソッドを呼び出します。

import datetime

print(datetime.date.today()) # 2022-12-04

最初にimport文でdatetimeモジュールを取得しています。
次の処理で、dateオブジェクトのtodayメソッドを呼び出しています。

結果をprint関数で出力しています、下記のように年月日が取得できました。

2022-12-04

日付をフォーマットする

datetimeモジュールのdate・datetimeオブジェクトからstrftimeメソッドを呼ぶことができます。
このstrftimeメソッドに書式を渡すことで、日付を指定したフォーマットで表示することができます。

例えば、「年/月/日 時」と表したいときには、下記のようになります。

import datetime

nowDatetime = datetime.datetime.now()
print(nowDatetime.strftime('%Y/%m/%d %H')) # 2022/12/05 11

最初にdatetimeモジュールをimportしました。

次の処理で、datetimeオブジェクトのnowメソッドを呼び出して、現在日付のdatetimeオブジェクトを取得します。
取得したオブジェクトはnowDatetime変数に代入しています。

最後に、代入したnowDatetime変数からstrftimeメソッドを呼び出してフォーマットした内容を出力しました。
strftimeメソッドには文字列で、表示したい内容のフォーマットを渡しています。

それぞれのフォーマット記号の前には、%をつけます。
今回使ったフォーマットは下記です。

・`%Y`は年(西暦4桁)になる
・`%m`は月になる
・`%d`は日になる
・`%H`は時間(24時間表記)になる

上記のフォーマットに加えて、好きな文字を入れることができるので、年月日をスラッシュ/で区切っています。
そうすると、下記のように出力されました。

2022/12/05 11

書式に関しては次項にまとめたので、確認してみてください。

strftimeで使えるフォーマットまとめ

よく使いそうなstrftimeメソッドのフォーマットを表にまとめました。

フォーマット文字 説明
%w 曜日の10進数表記。0が日曜日で6が土曜日 0 〜 6
%Y 年(西暦4桁)を10進数表記。 2022
%m 月を0埋めして、2桁表示(10進数) 01, 02, 03 〜 12
%d 日を0埋めして、2桁表示(10進数) 01, 02, 03 〜 31
%H 時を0埋めして、24時間表記の2桁表示(10進数) 00, 01 〜 22, 23
%M 分を0埋めして、2桁表示(10進数) 00, 01 〜 59
%S 秒を0埋めして、2桁表示(10進数) 00, 01 〜 59
%y 世紀なしの年を、2桁表示(10進数) 00, 01 〜 99
%I 時を0埋めして、12時間表記の2桁表示(10進数) 01, 02, 03 〜 11, 12
%j 0埋めした、1年間でみたときの現在の日にち 000, 001 〜 365, 366

日付の計算

日付を加算して、n時間後・n日後を取得する方法やn時間前・n日前を取得する方法についてです。
timedeltaオブジェクトを使うことで、足したり引いたりすることが可能です。

timedeltaオブジェクトについて

timedeltaオブジェクトは、経過時間や2つの日付・時刻の差を表すオブジェクトです。
日・秒・マイクロ秒・ミリ秒・分・時間・週を指定して、オブジェクトを作成することができます。

datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

timedeltaオブジェクトには、月や年を設定することができません。
月や年を計算するときには、relativedeltaを使うと良いようです。

日付を加算する

現在日付から3日後・3時間後・30分後を取得してみます。

3日後を取得する

日付を加算して、現在日時から3日後を取得してみます。
datetimeモジュールのtimedeltaを使うと、datetimeオブジェクトに日付を加算することができます。

import datetime

nowDatetime = datetime.datetime.now()
addDayDatetime = nowDatetime + datetime.timedelta(days=3)

print(addDayDatetime.date()) # 2022-12-08

最初にdatetimeモジュールをimportしました。
次の処理で、現在日時のdatetimeオブジェクトを取得して、nowDatetime変数に代入しました。

そして、その次の処理でnowDatetime変数とtimedeltaオブジェクトを足しています。
timedeltaオブジェクトを作るときに、「days=3」を設定しているので3日後になります。

結果をaddMonthDatetime変数に入れて、出力すると「2022-12-08」となりました。(2022年12月08日現在)
このようにtimedeltaオブジェクトをdatetimeオブジェクトに足すことで、取得することができます。

3時間後を取得する

同じようにtimedeltaオブジェクトを使って、時間を加算することができます。

import datetime

nowDatetime = datetime.datetime.now()
addHourDatetime = nowDatetime + datetime.timedelta(hours=3)

print(addHourDatetime.time()) # 16:48:42.634254

最初にdatetimeモジュールをimportしています。
その後に、現在日時でdatetimeオブジェクトのnowDatetime変数を作っています。

そして、nowDatetime変数とtimedeltaオブジェクトを足しました。
timedeltaオブジェクトを「hours=3」で作っているので、3時間後になります。

print関数で出力すると「16:48:42.634254」となりました。(13時に実行)

30分後を取得する

同じようにtimedeltaオブジェクトを使って、分を加算することができます。

import datetime

nowDatetime = datetime.datetime.now()
addMinutesDatetime = nowDatetime + datetime.timedelta(minutes=30)

print(addMinutesDatetime.time()) # 14:25:02.282379

先ほどと同様のプログラムを少し修正しています。

現在時間のnowDatetime変数とtimedeltaオブジェクトを足しました。
timedeltaオブジェクトを作るときに「minutes=30」を設定しているので、30分後になります。

print関数で出力すると「14:25:02.282379」となりました。(13時55分に実行)

日付を減算する

日付を減算するときにも、timedeltaオブジェクトを使うと、n日前やn時間前が取得できます。

3日前を取得する

timedeltaオブジェクトを作って、datetimeオブジェクトから引くことで、n日前を取得することができます。

import datetime

nowDatetime = datetime.datetime.now()
subDayDatetime = nowDatetime - datetime.timedelta(days=3)

print(subDayDatetime.date())

足し算の時と同様に、nowDatetime変数に現在日付のdatetimeオブジェクトを作成しています。
nowDatetime変数(datetimeオブジェクト)からtimedeltaオブジェクトを引いています。

timedeltaオブジェクトを作っているところで、「days=3」を設定しているので、3日が引かれます。
結果をsubDayDatetime変数に入れて、日付を出力すると「2022-12-02」となりました。(2022年12月05日現在)

3時間前を取得する

時間を引くときにも、同じようにtimedeltaオブジェクトを作って、datetimeオブジェクトから引きます。

import datetime

nowDatetime = datetime.datetime.now()
subHourDatetime = nowDatetime - datetime.timedelta(hours=3)

print(subHourDatetime.time()) # 11:10:30.992919

同じようにnowDatetime変数に現在日付のdatetimeオブジェクトを代入しました。
nowDatetime変数(datetimeオブジェクト)からtimedeltaオブジェクトを引いています。

timedeltaオブジェクトを作っているところで、「hours=3」を設定しているので、3時間が引かれます。
結果を出力すると「11:10:30.992919」と、3時間前になっていることが確認できました。(14時に実行)

30分前を取得する

分を引くときにも、同じようにtimedeltaオブジェクトを作って、datetimeオブジェクトから引きます。

import datetime

nowDatetime = datetime.datetime.now()
subMinutesDatetime = nowDatetime - datetime.timedelta(minutes=30)

print(subMinutesDatetime.time()) # 13:47:40.188153

同じようにnowDatetime変数に現在日付のdatetimeオブジェクトを代入しました。
nowDatetime変数(datetimeオブジェクト)からtimedeltaオブジェクトを引いています。

timedeltaオブジェクトを作っているところで、「minutes=30」を設定しているので、30分が引かれます。
結果を出力すると「13:47:40.188153」と、30分前になっていることが確認できました。(14時17分に実行)

日付の比較

日付を比較する方法についてです。
datetimeオブジェクトやdateオブジェクトから「<」や「>」などの比較演算子を使うと比較できます。

import datetime

nowDate = datetime.date.today()
afterDate = datetime.date(2022, 12, 6)
equalDate = datetime.date(2022, 12, 5)
beforeDate = datetime.date(2022, 12, 4)

if nowDate < afterDate:
    print('nowDateよりafterDateは後の日付です')

if nowDate == equalDate:
    print('nowDateとequalDateは同じです')

if nowDate > beforeDate:
    print('nowDateよりbeforeDateは前の日付です')

最初にdatetime.date.todayメソッドで、現在日のdateオブジェクトを作って、nowDate変数に代入しました。

afterDate変数には、1日後の日付でdateオブジェクト作成しました。(現在は2022年12月5日)
equalDate変数には現在日と同じ日、beforeDate変数には前日の日付で作成しています。

nowDate変数とafterDate変数を比較していますが、このように比較演算子で比較できます。
2022-12-5 < 2022-12-6」となるためTrueになります。

次にnowDate変数とequalDate変数を比較しています。
こちらは同じ日付で「2022-12-5 == 2022-12-5」となるためTrueです。

最後にnowDate変数とbeforeDate変数を比較しています。
前の日付と比べていて「2022-12-5 > 2022-12-4」となるためTrueになります。

2022年12月5日にプログラムを実行すると、すべてTrueになるため出力結果は下記になります。

nowDateよりafterDateは後の日付です
nowDateとequalDateは同じです
nowDateよりbeforeDateは前の日付です

Pythonで日付操作のまとめ

今回はPythonの日付操作について書きました。

まとめると、下記のようになります…

・日付を取得したり、計算したりするときにはdatetimeモジュールを使う
・datetimeモジュールからdatetimeオブジェクトやdateオブジェクトなどが取得できる
・取得したオブジェクトの日付の表示をフォーマットをするにはstrftimeメソッドを使う
・分/時/日にちを足したり引いたりするときにはtimedeltaオブジェクトが使える
・比較するときには、比較演算子を使って比較する

コメント

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