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メソッドには文字列で、表示したい内容のフォーマットを渡しています。
それぞれのフォーマット記号の前には、%
をつけます。
今回使ったフォーマットは下記です。
・`%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オブジェクトやdateオブジェクトなどが取得できる
・取得したオブジェクトの日付の表示をフォーマットをするにはstrftimeメソッドを使う
・分/時/日にちを足したり引いたりするときにはtimedeltaオブジェクトが使える
・比較するときには、比較演算子を使って比較する
コメント