みなさんこんにちは、ZeroTerasu(@ZeroTerasu)です。
今回は、pythonで使用される日付・時間に関するデータ型、モジュール等についてまとめて記事に致しました。
日付に関する処理は、Pythonのみならず様々なプログラミング言語で必須の処理になりますのでマスターしておく必要があると考えます。
公式ドキュメントは下記リンク先です。
- データ型
- 使用するモジュール:datetime
- 日付を生成:date(year, month, day) or datetime(year, month, day)
- 時間を生成:time(hour, minute, second) or datetime(hour, minute, second)
- 現在時刻のオブジェクトを生成:datetime.now()
- 日付と時間の合成:datetime.combine(date, time)
- datetime → date
- 日付の計算(前日・翌日の生成方法)
- 文字列->datetime変換:datetime.strptime(‘日付文字列’, ‘フォーマット文字’)
- タイムゾーンを日本時間に設定
データ型
データ型 | 説明 | 属性 |
---|---|---|
date | 日付に関するデータ型。 | 年、月、日 |
time | 時間に関するデータ型。 | 時、分、秒、マイクロ秒、タイムゾーン |
datetime | 日付と時間を組み合わせたデータ型。 | 年、月、日、時、分、秒、マイクロ秒、タイムゾーン |
timedelta | date, time, datetimeの時間差 | マイクロ秒 |
tzinfo | タイムゾーン情報 | |
timezone | tzinfoをUTCから差異で表す。 |
使用するモジュール:datetime
・日付・時間に関するモジュールには、標準ライブラリの「datetime」を使用します。
・標準モジュールですので、install不要です。
・「import datetime」だけでimportすると、以後のコードで「datetime.datetime」と繰り返し記述する必要が生じるため、「from datetime import datetime」とします。
※「import datetime」だけでimportすると、モジュールとしてのdatetimeと認識されてしまい、エラーとなります。
from datetime import datetime
日付を生成:date(year, month, day) or datetime(year, month, day)
・任意の日付オブジェクトの生成には、date() または datetime()メソッドを使用します。
・datetime()メソッドを使用した場合、時、分、秒を省略した際は、それぞれ「0」が代入されます。
from datetime import date, datetime
print(date(2022,8,27))
type(date(2022,8,27))
print(datetime(2022,8,27))
type(datetime(2022,8,27))
# 実行結果
2022-08-25
datetime.date
2022-08-27 00:00:00
datetime.datetime
時間を生成:time(hour, minute, second) or datetime(hour, minute, second)
・任意の時間オブジェクトの生成には、time() または datetime()メソッドを使用します。
・datetime()メソッドを使用する場合、年、月、日は省略できません。それぞれ1以上の整数を引数に渡す必要があります。
from datetime import datetime, date, time
print(time(18,30,30))
print(type(time(18,30,30)))
print(datetime(1900,1,1,18,30,30))
print(type(datetime(1900,1,1,18,30,30)))
# 実行結果
18:30:30
<class 'datetime.time'>
1900-01-01 18:30:30
<class 'datetime.datetime'>
現在時刻のオブジェクトを生成:datetime.now()
・現在の日時を生成するには、datetime.now()メソッドを使用します。
print(datetime.now())
type(datetime.now())
# 実行結果
2022-08-27 18:22:45.216843
datetime.datetime
日付と時間の合成:datetime.combine(date, time)
・combine()にdateオブジェクトおよびtimeオブジェクトを渡すことでdatetimeオブジェクトとして結合することが出来ます。
from datetime import date, time, datetime
tarday = date(2022,8,27)
tartime = time(11,30,30)
tardate = datetime.combine(tarday, tartime)
print(tardate)
# 実行結果
2022-08-27 11:30:30
<class 'datetime.datetime'>
datetime → date
・datetimeオブジェクトは、dateオブジェクトとtimeオブジェクトの両方を内包したオブジェクトです。
・datetimeオブジェクトからdateオブジェクトの部分だけを切り取るためには、datetime.date()を使用します。
import datetime
NOW = datetime.datetime.now()
TODAY = datetime.datetime.now().date()
# 実行結果
datetime.datetime(2022, 8, 27, 9, 1, 16, 94514) # NOWの実行結果
datetime.date(2022, 12, 25) # TODAYの実行結果
日付の計算(前日・翌日の生成方法)
・timedeltaオブジェクトを使って二つの日付の差分を加算または減算します。
・timedelta(days=1)で1日分の差分を表すことが出来ます。
・timedeltaオブジェクトの引数には、seconds, minutes, hoursのような引数も用意されています。
import datetime
TODAY = datetime.datetime.now.date()
YESTERDAY = TODAY - datetime.timedelta(days=1)
TOMORROW = TODAY + datetime.timedelta(days=1)
# 実行結果
datetime.date(2022, 8, 27) # TODAY の実行結果です。
datetime.date(2022, 8, 26) # YESTERDAY の実行結果です。
datetime.date(2022, 8, 28) # TOMORROW の実行結果です。
文字列->datetime変換:datetime.strptime(‘日付文字列’, ‘フォーマット文字’)
・文字列→datetime変換には、strptime()メソッドを使用します。
・引数に変換対象の文字列を渡します。この文字列の表記に合わせるようにフォーマット文字を指定します。
・フォーマット文字に使用される書式指定子には、下記のものがあります。
指定子 | 意味 | 使用例 |
---|---|---|
%a | 曜日名 短縮形 | Sun, Mon, …, Sat |
%A | 曜日名 | Sunday, Monday, …, Saturday |
%w | 曜日の10進表記した文字列を表示。0 :日曜日、6 :土曜日。 | 0, 1, …, 6 |
%d | 0埋め10進数表記の日にち。 | 01, 02, …, 31 |
%b | 月名 短縮形 | Jan, Feb, …, Dec |
%B | 月名 | January, February, …, December |
%m | 0埋め10進数月。 | 01, 02, …, 12 |
%y | 0埋め10進数年。短縮形 | 00, 01, …, 99 |
%H | 0埋めした10進数で表記した時 (24時間表記)。 | 00, 01, …, 23 |
%I | 0埋めした10進数で表記した時 (12時間表記)。 | 01, 02, …, 12 |
%p | AM もしくは PM | AM, PM |
%M | 0埋め10進数表記の分。 | 00, 01, …, 59 |
%S | 0埋め10進数表記の秒。 | 00, 01, …, 59 |
タイムゾーンを日本時間に設定
ローカル環境ではJSTが適用されますが、本番環境では日本時間以外のタイムゾーンが設定されていることもあります。そこで、タイムゾーンを明示的にJSTに設定する方法を解説します。
import datetime
JST = datetime.timezone(datetime.timedelta(hours=9), 'JST')
JST_TODAY = datetime.datetime.now(JST).date().strftime('%Y年%m月%d日')
JST_TODAY
# 実行結果
'2022年8月27日'
コメント