日付や時刻の一部の値を別の値に置き換えたインスタンスを生成する
datetime クラスの replace メソッドを使用することで、月や分など日付や時刻の一部の値を別の値に置き換えたインスタンスを生成することができます。 またタイムゾーンの値が含まれないインスタンスに対してタイムゾーンの情報を加えた新しいインスタンスを生成することもできます。ここでは日付や時刻の一部の値を別の値に置き換えたインスタンスを生成する方法について解説します。
(Last modified: )
日付や時刻の値を別の値に置き換える
datetime クラスのインスタンスに対して日付や時刻の値を別の値に置き換えた新しいインスタンスを作成するには datetime クラスの replace メソッドを使用します。(長いので引数毎に改行して表示しています)。
datetime.replace( year=self.year, month=self.month, day=self.day, hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo, * fold=0)
例えば年に関する値を変更する場合は、引数として year=2019 のように指定します。引数に指定しなかった値はそのままです。一部の値を別の値に置き換えて新しい datetime クラスのインスタンスを作成します。
具体的には次のように記述します。
import datetime tokyo_tz = datetime.timezone(datetime.timedelta(hours=9)) dt = datetime.datetime.now(tokyo_tz) print(dt); >> 2020-07-22 23:48:03.582738+09:00 new_dt = dt.replace(year=2019, hour=4, minute=0, second=0) print(new_dt); >> 2019-07-22 04:00:00.582738+09:00
なお replace メソッドは date クラスおよび time クラスでも用意されています。
次のサンプルを見てください。
import datetime tokyo_tz = datetime.timezone(datetime.timedelta(hours=9)) dt = datetime.datetime.now() print(dt); >> 2020-11-13 22:57:45.063519 print(dt.replace(hour=4, minute=0, second=0)) >> 2020-11-13 04:00:00.063519 print(dt.replace(year=2018, month=4, day=1)) >> 2018-04-01 22:57:45.063519 print(dt.replace(tzinfo=tokyo_tz)) >> 2020-11-13 22:57:45.063519+09:00
3 つ目はタイムゾーンに関する情報を持っていなかった datetime クラスのインスタンスを利用して、タイムゾーンの情報を加えた新しいインスタンスを生成しました。
-- --
日付や時刻の一部の値を別の値に置き換えたインスタンスを生成する方法について解説します。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。