今日の記事では、Pythonのtimedeltaオブジェクトの使い方について見ていきます。
このオブジェクトは、時間のインスタンスをオブジェクトとして表現したい場合に、とても便利です。
整数や浮動小数点数とは対照的に、これは実際のオブジェクトです。
このオブジェクトの利点は、アプリケーションとの統合をより柔軟に行えるようになることです。
それでは、いくつかの簡単な例を使って、これをどのように使うか見てみましょう。
Python timedelta オブジェクト
このクラスは標準ライブラリの一部である datetime モジュールで利用できます。
from datetime import timedelta
|
このクラスのコンストラクタを使用して timedelta オブジェクトを作成できます。
from datetime import timedelta
timedelta_object = timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
print(timedelta_object)
# Same as above (Everything set to 0)zero_obj = timedelta()
print(zero_obj)
|
結果は以下の通りです。
0:00:000:00:00 |
パラメータをカスタマイズして、独自のdatetimeオブジェクトを作ることができることに注意してください。
引数の値を設定しない場合、デフォルトで0とみなされます。
引数は整数または浮動小数点数で、正負の値を設定できます。
Python の既存のタイムデルタオブジェクトを操作する
独自のタイムデルタオブジェクトを作成する以外に、既存のタイムデルタオブジェクトを操作することもできます。
基本的な演算子を使って、2つのタイムデルタオブジェクトを足したり、引いたり、割ったりすることができます。
a = timedelta(hours=4, seconds=100)
print(a)
b = timedelta(hours=2, seconds=50)
print(b)
print("Output:")
print(a + b, a - b, a / b, sep=')
|
結果は以下の通りです。
4:01:402:00:50Output:6:02:302:00:502.0 |
このように、簡単な操作でオブジェクトを直接操作することができます。
現在のdatetimeオブジェクトを取得する
さて、実際のプログラムでは、ほとんどの場合、現在の時刻を使用して、それをdatetimeオブジェクトとして保存したいと思うでしょう。
datetime.now()関数を使えば、現在の時刻をdatetimeオブジェクトとして表示することができます!
この関数はモジュール名から個別にインポートする必要があることに注意してください!
from datetime import datetime
|
では、例を見てみましょう。
from datetime import datetime
current_datetime = datetime.now()
print(current_datetime)
|
結果は以下の通りです。
datetime.datetime(2020, 6, 27, 22, 45, 54, 267673)
|
出力は一致しているようです! 現在の時刻は、私のローカルタイムゾーン(IST)で2020年6月27日22時45分54秒と表示されています。
さて、基本的な演算子を使って、過去や未来の時刻を取得することもできます
from datetime import datetime, timedelta
current_datetime = datetime.now()
# future datesone_year_future_date = current_datetime + timedelta(days=365)
print('Current Date:', current_datetime)
print('One year from now Date:', one_year_future_date)
# past datesthree_days_before_date = current_datetime - timedelta(days=3)
print('Three days before Date:', three_days_before_date)
|
結果は以下の通りです。
Current Date: 2020-06-27 22:45:54.267673One year from now Date: 2021-06-27 22:45:54.267673Three days before Date: 2020-06-24 22:45:54.267673 |
この記事もチェック:Pythonのpytzモジュールを使ってタイムゾーンを変更する方法
Python の timedelta を使って日付と時刻を指定する
Python timedelta クラスを日付オブジェクトと一緒に、加算と減算を使って使用することもできます。
from datetime import datetime, timedelta
current_datetime = datetime.now()
dt = current_datetime.date()
print('Current Date:', dt)
dt_tomorrow = dt + timedelta(days=1)
print('Tomorrow Date:', dt_tomorrow)
|
結果は以下の通りです。
Current Date: 2020-06-27Tomorrow Date: 2020-06-28 |
これは、タイムスタンプを保存/表示しようとするときに、より柔軟性を与えます。
もし、最小限のフォーマットでタイムスタンプを表示したいのであれば、 datetime_object.date() を使うのが良い選択です。
Python timedelta 合計秒数
を使って、任意のtimedeltaオブジェクトの合計秒数を表示することができます。
from datetime import timedelta
print('Seconds in an year:', timedelta(days=365).total_seconds())
|
結果は以下の通りです。
Output: Seconds in an year: 31536000.0 |
特定のタイムゾーンのためのdatetimeオブジェクトを使用する
datetimeオブジェクトを保存したり表示したりするときに、異なるタイムゾーンを使いたい場合があるかもしれません。
Pythonでは、 pytz モジュール (Python Timezones) を使用して、これを行う便利な方法が用意されています。
まだインストールしていない場合は、 pip を使用して pytz をインストールすることができます。
pip install pytz
|
それでは、 pytz.timezone(TIMEZONE) を使用してタイムゾーンを選択し、それを timedelta オブジェクトに渡すことができます。
以下は、同じ時刻を異なるタイムゾーンで表示する簡単な例です。
便利なヒント: pytz.common_timezones を使用すると、一般的なタイムゾーンをリストアップすることができます。
from datetime import datetime
from pytz import timezone, common_timezones
datetime_object = datetime.now(timezone('Asia/Kolkata'))
print("Current IST:", datetime_object)
|
結果は以下の通りです。
Current IST: 2020-06-27 23:27:49.003020+05:30 |
from datetime import datetime
from pytz import timezone, common_timezones
import random
for _ in range(4):
zone = random.choice(common_timezones)
print(f"Using TimeZone: {zone}")
datetime_object = datetime.now(timezone(zone))
print(datetime_object)
|
結果は以下の通りです。
Using TimeZone: America/St_Lucia
2020-06-27 13:57:04.804959-04:00
Using TimeZone: Asia/Muscat
2020-06-27 21:57:04.814959+04:00
Using TimeZone: Asia/Urumqi
2020-06-27 23:57:04.825990+06:00
Using TimeZone: Asia/Seoul
2020-06-28 02:57:04.836994+09:00
|
確かに、異なるタイムゾーンでの現在時刻を取得することができました
まとめ
今回は、timedeltaオブジェクトを使ってPythonのオブジェクトとして時間を表現する方法を学びました!
参考文献
- Python timedelta に関する JournalDev の記事。