Python
標準ライブラリ
日付/時間 - datetime
基本

Python datetime モジュール: timedelta, timezone, tzinfo の使い方

日付や時刻を扱うことは、開発者にとって日常的な作業であると言ってもいいでしょう。 特に時間に敏感なデータ、スケジューリング、ロギングを扱う場合はそうです。

Pythonには強力な標準ライブラリがあり、日付と時刻を効率的に扱うための datetime というシンプルで強力なモジュールがあります。

この記事では datetime モジュール、その主なクラスと関数、Python で日付と時刻を扱うためのベストプラクティスについて説明します。

💡

VScodeでPythonを使う場合は、この投稿を参照してください。

1. Pythonのdatetimeモジュールを理解する

Python 標準ライブラリの datetime モジュールは以下の関数を含んでいます: datetimedatetimetimedeltatzinfo、その他日付や時刻を操作するためのいくつかのクラスがあります。 最も一般的なクラスとメソッドから始めましょう。

1.1. datetime.datetime

このクラスは、日付と時刻の両方の情報を持つ1つの時点を表します。 また、日付と時刻の値にアクセスして操作するためのさまざまなメソッドと属性を提供します。

それではまず datetime オブジェクトを作りましょう。

from datetime import datetime
 
# 現在の日付と時刻
now = datetime.now()
 
print(now)
 
# 特定の日時
dt = datetime(2022, 9, 15, 10, 30)
 
print(dt)

このオブジェクトでアクセスできる属性は次のとおりです。

from datetime import datetime
 
now = datetime.now()
 
print(f"Year: {now.year}")
print(f"Month: {now.month}")
print(f"Day: {now.day}")
print(f"Hour: {now.hour}")
print(f"Minute: {now.minute}")
print(f"seconds: {now.second}")
print(f"Milliseconds: {now.microseconds}")

1.2 datetime.date

このクラスは日付(年、月、日)を表し、時間情報のない日付を扱うメソッドを提供します。

まず、欲しい情報を得るために date オブジェクトを作成します。

from datetime import date
 
# 現在の日付
today = date.today()
 
print(today)
 
# 特定の日付
d = date(2022, 9, 15)
 
print(d)

1.3. datetime.time

このクラスは時間(時、分、秒、ミリ秒)を表し、日付情報を含まない時間値のみを扱うメソッドを提供します。

時刻情報を取得するには time オブジェクトを作成します。

from datetime import time
 
# 特定の時間
t = time(10, 30, 15)
 
print(t)

datetime.timedelta

これは期間を表すとても便利なクラスで、datetime{:python オブジェクトを使って、日、時間、分の足し算や引き算などの計算を行うことができます。

timedelta{:pythonオブジェクトは以下のように作成できます:

from datetime import timedelta
 
# 5日、3時間、30分の期間を変数に宣言する。
delta = timedelta(days=5, hours=3, minutes=30)
 
print(delta)

datetime{:pythontimedelta{:pythonオブジェクトを使って特定の期間を計算してみましょう。

from datetime import datetime, timedelta
 
now = datetime.now()
 
# 5日後に計算
future = now + timedelta(days=5)
 
print(future)
 
# 3時間前に計算
past = now - timedelta(hours=3)
 
print(past)

2. タイムゾーンと UTC 時間 (UTC TIme) を扱う

datetime モジュールは tzinfo のサブクラスである timezone クラスを提供し、タイムゾーンと UTC (協定世界時) のオフセットを扱うことができます。 また、 tzinfo のサブクラスである timezone クラスも提供する。 タイムゾーンを意識した datetime オブジェクトを作成するには、 timezone クラスと astimezone() メソッドを使用します。

例を見てください。

from datetime import datetime, timezone
 
# 現在のUTC時間
utc_now = datetime.now(timezone.utc)
 
print(utc_now)
 
# 別のタイムゾーンに変換する
from pytz import timezone
 
tz = timezone("Asia/Seoul")
local_now = utc_now.astimezone(tz)
 
print(local_now)

上の例では、外部パッケージである pytz ライブラリを使用して、指定されたタイムゾーンを処理しています。 pytzライブラリはPythonでタイムゾーンの変換を処理するために広く使われています。

3. 日付と時刻のフォーマットと解析

datetimeモジュールは日付と時刻を文字列としてフォーマットしたりパースしたりするための2つの便利なメソッドを提供します。

  • datetime.strptime(date_string, format): このメソッドは2つの引数を取ります。date_stringは日付と時刻の文字列表現、formatは入力文字列の日付と時刻の構造を指定するフォーマット文字列で、文字列から時刻情報を抽出します。
  • datetime.strftime(format): このメソッドは、出力文字列の構造を指定するフォーマット文字列formatを引数にとります。このメソッドはdatetimeオブジェクトに対して呼び出され、指定されたフォーマットに従った日付/時刻の文字列表現を返します。
from datetime import datetime
 
# strptime() メソッドで文字列から時刻情報を読み込む。
date_string = "15-04-2023 16:30:00"
format_string = "%d-%m-%Y %H:%M:%S"
date_obj = datetime.strptime(date_string, format_string)
 
print(date_obj)  # Output: 2023-04-15 16:30:00
 
# strftime() メソッドで時刻情報を文字列に変換する。
new_format_string = "%A, %B %d, %Y at %I:%M %p"
formatted_date = date_obj.strftime(new_format_string)
 
print(formatted_date)  # Output: Saturday, April 15, 2023 at 04:30 PM

4. Python で日付と時刻を扱うためのベストプラクティス

ここまでで、Pythonの datetime モジュールを使って日付と時刻を扱う基本を説明しました。 ここでは、このモジュールを使用する際に覚えておくべきベストプラクティスを紹介します。

  • タイムゾーンを意識する datetimeオブジェクトを使用する際に、タイムゾーンを意識することは重要な問題です。 異なるタイムゾーンで日付や時刻を扱うときは、サマータイムやローカルな時差のような問題を避けるために、常に datetime オブジェクトを使用してください。
  • タイムゾーンの変換には pytz ライブラリを使用することを推奨します。pytz ライブラリはタイムゾーンの広範で最新のデータベースを提供します。 これはPythonでタイムゾーンの変換を処理するために広く使われています。
  • datetime オブジェクトを文字列に変換したり、文字列から情報を解析したりするには、 strftime() メソッドと strptime( ) メソッドを使用します。 これらのメソッドは Python で日付と時刻の文字列を扱うための一貫した柔軟な方法を提供します。

5. まとめ

この記事では、Python の datetime モジュールの基本について説明しました。 また、タイムゾーンの扱い方、文字列のフォーマット、日付と時刻の解析のベストプラクティスについても説明しました。

さて、より具体的な内容については、datetime (opens in a new tab) の公式 Python ドキュメントを読むことをお勧めします。 公式ドキュメントは常に最良のガイドです。

特定のケースの解決法については、calculate, compare date/timeconvert date/timeprint date/timeを参照してください。 を投稿してください。

日付や時刻を扱うことは頻繁に遭遇することなので、時間をかけて理解しましょう。 一度コツをつかめば、将来、日付や時刻を操作するさまざまなタスクをこなせるようになります。

copyright for Python datetime

© 2023 All rights reserved.