日付や時刻の一部の値を別の値に置き換えたインスタンスを生成する

datetime クラスの replace メソッドを使用することで、月や分など日付や時刻の一部の値を別の値に置き換えたインスタンスを生成することができます。 またタイムゾーンの値が含まれないインスタンスに対してタイムゾーンの情報を加えた新しいインスタンスを生成することもできます。ここでは日付や時刻の一部の値を別の値に置き換えたインスタンスを生成する方法について解説します。

(2022 年 04 月 11 日公開 / 2022 年 04 月 11 日更新)

日付や時刻の値を別の値に置き換える

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 )

広告
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。