Python

Python初心者向け:日時の加算・減算の操作を基本から解説

スポンサーリンク

はじめに

今回は日時の操作方法について扱います。これまで文字列型や数値型の日付データを日付型に変換する方法を学びました。

今回は、日付型に変換した後の処理の仕方について整理しましょう。 Pythonには日時操作に関するモジュールがいくつか用意されて いますが、datetimeクラスとdateutilクラスを順にみていきましょう。

datetimeクラス

日時情報は、datetimeモジュールのdatetimeクラスが保持します。まずは、datetimeクラスを使って、日時オブジェクトを生成してみましょう。次のような書式になります。

datetime.datetime(年,月,日,時,分,秒,マイクロ秒)
※引数の「時」 以下は省略可能で、デフォルト値は0になります。

さっそく一つオブジェクトを作ってみましょう。

import datetime as dt
d1=dt.datetime(2020,7,4,23,15,59,99999)
d1

作成したオブジェクトから年、月、日、などの日時情報を取得するには次のようにします。

print(d1.year)
print(d1.month)
print(d1.day)
print(d1.hour)
print(d1.minute)
print(d1.second)
print(d1.microsecond)

このようにdatetimeオブジェクトのあとに「.year」 「.month」 「.day」 「.hour」 「.minute」 「.second」 「.microsecond」をつけることで取得できる。

データ集計をしていると、曜日が影響するケースも多々ある。datetimeオブジェクトから曜日の情報も簡単に取得することができる。

d1.weekday()

このように「.weekday()」は数字を返す。この数字は、月曜日:0~日曜日:6を表す。

日時の加算・減算はdatetimeモジュールのtimedeltaクラスを使うと、days, seconds, microseconds, milliseconds, minuites, hours, weeks, の加算・減算ができる。※年・月の加減算ができない

d1+dt.timedelta(days=1)

datetimeオブジェクト同士で演算子による加算/減算もできる。

d1=dt.datetime(2020,6,3)
d2=dt.datetime(2020,7,15)
dd=d2-d1
dd.days

dateutilクラス

dateutilクラスを使うことで、さらに高度な日時の操作を行うことができます。 dateutils.relativedeltaモジュールを用いると、timedeltaでできなかった年・月の加算を行うことができます。

# ライブラリのインポート
from dateutil.relativedelta import relativedelta

このrelativedeltaには、2つの書式があります。1つめの書式は、引数として2つのdatetimeオブジェクトを渡すものです。これは、1つめのオブジェクトと2つめのオブジェクトの「差」を計算します。

d1=dt.datetime(2020,7,4)
d2=dt.datetime(2019,8,15)
relativedelta(d1,d2)

このように、各オブジェクトの差分を計算してくれます。この例では、「10か月と19日」の差があることがわかります。各要素を取り出すには次のようにします。

relativedelta(d1,d2).years
relativedelta(d1,d2).months
relativedelta(d1,d2).days

全部、years, months, days, のように複数形になることに注意しましょう。2つ目は、キーワード引数を使った演算です。これは、datetimeではできなかった年・月の演算もできます。

d1=dt.datetime(2020,7,4)
d1+relativedelta(years=3)
d1+relativedelta(months=2)

キーワード引数の単数・引数では大きな違いがあります。dayという引数を使うと次のように前月・当月・翌月の月末/月初の情報を取得することもできます。

# 月初
d1=dt.datetime(2020,7,4)
d1+relativedelta(day=1)
# 月末
d1+relativedelta(day=99)
# 1か月前の月末
d1+relativedelta(months=-1,day=99)

このようにday=1とすると月初、day=99とすると月末となります。なんだかおもしろいですね。

スポンサーリンク

まとめ

いかがでしょうか?今回は日時の操作方法について学びました。この辺は、何回か日付データを扱ううちに慣れるでしょう。よく復習しておいてください。

▶ タイムゾーンを考慮した処理を行う場合は以下を参考にしてください。

コメント

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