[Python] 日時を扱うdatetimeの使い方

Pythonのdatetimeモジュールは、日時を扱うための強力なツールです。

このモジュールを使用することで、日付や時間の計算、フォーマット、比較などが簡単に行えます。

datetimeクラスを使えば、現在の日時を取得したり、特定の日付を生成することが可能です。

また、timedeltaクラスを利用することで、日時の加減算も容易に行えます。

さらに、strftimeメソッドを用いることで、日時を任意のフォーマットで文字列に変換することができます。

この記事でわかること
  • 現在の日付と時刻の取得方法
  • 日付と時刻のフォーマット変換
  • 日付や時刻の計算方法
  • タイムゾーンの設定と変換
  • 日付と時刻のバリデーションやソートの実践例

目次から探す

datetimeモジュールの概要

datetimeモジュールとは

datetimeモジュールは、Pythonで日付や時刻を扱うための標準ライブラリです。

このモジュールを使用することで、日付や時刻の取得、計算、フォーマット変換などが簡単に行えます。

主に以下のクラスが含まれています。

スクロールできます
クラス名説明
datetime日付と時刻を表すクラス
date日付(年、月、日)を表すクラス
time時刻(時、分、秒、マイクロ秒)を表すクラス
timedelta日付や時刻の差を表すクラス
tzinfoタイムゾーン情報を表すクラス

datetimeモジュールのインポート方法

datetimeモジュールを使用するには、まずインポートする必要があります。

以下のようにインポートします。

import datetime

このインポート文を実行することで、datetimeモジュール内のクラスや関数を使用できるようになります。

例えば、datetimeクラスを使用して現在の日付と時刻を取得することができます。

日付と時刻の基本操作

現在の日付と時刻を取得する

Pythonでは、datetimeモジュールを使用して現在の日付と時刻を簡単に取得できます。

主に使用されるメソッドはnow()today()です。

datetime.now()の使い方

datetime.now()メソッドは、現在の日付と時刻を含むdatetimeオブジェクトを返します。

以下はその使用例です。

import datetime
current_datetime = datetime.datetime.now()
print(current_datetime)
2023-10-01 12:34:56.789012

datetime.today()の使い方

datetime.today()メソッドも現在の日付と時刻を取得しますが、now()とは異なり、タイムゾーン情報を持たないdatetimeオブジェクトを返します。

以下はその使用例です。

import datetime
today_datetime = datetime.datetime.today()
print(today_datetime)
2023-10-01 12:34:56.789012

特定の日付と時刻を設定する

特定の日付や時刻を設定するには、datetimeクラスのコンストラクタを使用します。

datetimeオブジェクトの生成

datetimeオブジェクトは、年、月、日、時、分、秒、マイクロ秒を指定して生成できます。

以下はその使用例です。

import datetime
specific_datetime = datetime.datetime(2023, 10, 1, 15, 30, 0)
print(specific_datetime)
2023-10-01 15:30:00

datetimeオブジェクトの属性

生成したdatetimeオブジェクトには、年、月、日、時、分、秒、マイクロ秒などの属性があります。

以下はその例です。

import datetime
specific_datetime = datetime.datetime(2023, 10, 1, 15, 30, 0)

print(specific_datetime.year)   # 年
print(specific_datetime.month)  # 月
print(specific_datetime.day)    # 日
print(specific_datetime.hour)   # 時
print(specific_datetime.minute) # 分
print(specific_datetime.second) # 秒
2023
10
1
15
30
0

日付と時刻のフォーマット

日付と時刻の文字列変換

Pythonでは、datetimeオブジェクトを文字列に変換するためにstrftime()メソッドを使用します。

このメソッドを使うことで、日付や時刻を指定したフォーマットで出力できます。

strftime()の使い方

strftime()メソッドは、datetimeオブジェクトをフォーマットされた文字列に変換します。

以下はその使用例です。

import datetime
current_datetime = datetime.datetime.now()
formatted_datetime = current_datetime.strftime("%Y年%m月%d日 %H時%M分%S秒")
print(formatted_datetime)
2023年10月01日 12時34分56秒

主要なフォーマットコード一覧

以下は、strftime()メソッドで使用できる主要なフォーマットコードの一覧です。

スクロールできます
コード説明
%Y年(4桁)
%y年(2桁)
%m月(01-12)
%d日(01-31)
%H時(00-23)
%M分(00-59)
%S秒(00-59)
%A曜日(フル名)
%a曜日(短縮名)
%B月(フル名)
%b月(短縮名)

文字列から日付と時刻を生成する

文字列をdatetimeオブジェクトに変換するには、strptime()メソッドを使用します。

このメソッドは、指定したフォーマットに従って文字列を解析します。

strptime()の使い方

strptime()メソッドを使用して、フォーマットされた文字列をdatetimeオブジェクトに変換する例を示します。

import datetime
date_string = "2023年10月01日 15時30分00秒"
datetime_object = datetime.datetime.strptime(date_string, "%Y年%m月%d日 %H時%M分%S秒")
print(datetime_object) 
2023-10-01 15:30:00

このように、strptime()を使うことで、特定のフォーマットに従った文字列からdatetimeオブジェクトを生成することができます。

日付と時刻の計算

timedeltaオブジェクトの使い方

timedeltaオブジェクトは、日付や時刻の差を表すために使用されます。

このオブジェクトを使うことで、日付や時刻の加算や減算が簡単に行えます。

timedeltaは、日数、秒数、マイクロ秒数を指定して生成します。

日付の加算と減算

timedeltaを使って日付の加算や減算を行う例を示します。

以下のコードでは、現在の日付に7日を加算し、また7日を減算しています。

import datetime
current_datetime = datetime.datetime.now()
added_days = datetime.timedelta(days=7)
future_date = current_datetime + added_days
past_date = current_datetime - added_days
print("現在の日時:", current_datetime)
print("未来の日付:", future_date)
print("過去の日付:", past_date)
現在の日時: 2023-10-01 12:34:56.789012
未来の日付: 2023-10-08 12:34:56.789012
過去の日付: 2023-09-24 12:34:56.789012

時間の加算と減算

timedeltaを使って時間の加算や減算を行うこともできます。

以下のコードでは、現在の時刻に3時間を加算し、また3時間を減算しています。

import datetime
current_datetime = datetime.datetime.now()
added_hours = datetime.timedelta(hours=3)
future_time = current_datetime + added_hours
past_time = current_datetime - added_hours
print("現在の日時:", current_datetime)
print("未来の時刻:", future_time)
print("過去の時刻:", past_time)
現在の日時: 2023-10-01 12:34:56.789012
未来の時刻: 2023-10-01 15:34:56.789012
過去の時刻: 2023-10-01 09:34:56.789012

日付と時刻の差を計算する

datetimeオブジェクト同士の差を計算することで、日付や時刻の差を求めることができます。

日付の差を求める

2つの日付の差を求める例を示します。

以下のコードでは、2つの日付の差を計算しています。

import datetime
date1 = datetime.datetime(2023, 10, 1)
date2 = datetime.datetime(2023, 10, 15)
date_difference = date2 - date1
print("日付の差:", date_difference.days, "日")
日付の差: 14 日

時間の差を求める

2つの時刻の差を求める例を示します。

以下のコードでは、2つの時刻の差を計算しています。

import datetime
time1 = datetime.datetime(2023, 10, 1, 12, 0, 0)
time2 = datetime.datetime(2023, 10, 1, 15, 30, 0)
time_difference = time2 - time1
print("時間の差:", time_difference)
時間の差: 0:30:00

このように、timedeltaを使うことで日付や時刻の計算が簡単に行えます。

タイムゾーンの扱い

タイムゾーンを設定する

Pythonでタイムゾーンを扱うためには、pytzモジュールを使用するのが一般的です。

このモジュールを使うことで、さまざまなタイムゾーンを簡単に設定できます。

pytzモジュールのインポート

まず、pytzモジュールをインポートします。

pytzは標準ライブラリではないため、事前にインストールが必要です。

以下のコマンドでインストールできます。

pip install pytz

インポートは以下のように行います。

import pytz

タイムゾーン付きdatetimeオブジェクトの生成

pytzを使用して、特定のタイムゾーンを持つdatetimeオブジェクトを生成する方法を示します。

以下のコードでは、東京のタイムゾーンを設定しています。

import datetime
import pytz
# 東京のタイムゾーンを取得
tokyo_tz = pytz.timezone('Asia/Tokyo')
# 現在の日時を東京のタイムゾーンで生成
tokyo_time = datetime.datetime.now(tokyo_tz)
print("東京の現在の日時:", tokyo_time)
東京の現在の日時: 2023-10-01 12:34:56.789012+09:00

タイムゾーンの変換

datetimeオブジェクトのタイムゾーンを変更することも可能です。

これにより、異なるタイムゾーン間での日時の変換が簡単に行えます。

タイムゾーンの変更方法

以下のコードでは、東京の日時をニューヨークのタイムゾーンに変換しています。

import datetime
import pytz
# 東京のタイムゾーンを取得
tokyo_tz = pytz.timezone('Asia/Tokyo')
tokyo_time = datetime.datetime.now(tokyo_tz)
# ニューヨークのタイムゾーンを取得
new_york_tz = pytz.timezone('America/New_York')
# 東京の日時をニューヨークのタイムゾーンに変換
new_york_time = tokyo_time.astimezone(new_york_tz)
print("ニューヨークの日時:", new_york_time)
ニューヨークの日時: 2023-10-01 00:34:56.789012-04:00

UTCとの変換

UTC(協定世界時)との変換も簡単に行えます。

以下のコードでは、東京の日時をUTCに変換しています。

import datetime
import pytz
# 東京のタイムゾーンを取得
tokyo_tz = pytz.timezone('Asia/Tokyo')
tokyo_time = datetime.datetime.now(tokyo_tz)
# UTCに変換
utc_time = tokyo_time.astimezone(pytz.utc)
print("UTCの日時:", utc_time)
UTCの日時: 2023-09-30 15:34:56.789012+00:00

このように、pytzモジュールを使用することで、タイムゾーンの設定や変換が容易に行えます。

応用例

日付と時刻のバリデーション

日付や時刻のバリデーションは、データの整合性を保つために重要です。

以下では、日付と時刻の範囲チェックの方法を示します。

日付の範囲チェック

特定の日付が有効な範囲内にあるかを確認する方法を示します。

以下のコードでは、指定した日付が2023年1月1日から2023年12月31日までの範囲内にあるかをチェックしています。

import datetime
def is_valid_date(date_to_check):
    start_date = datetime.datetime(2023, 1, 1)
    end_date = datetime.datetime(2023, 12, 31)
    return start_date <= date_to_check <= end_date

# チェックする日付
date_to_check = datetime.datetime(2023, 6, 15)
print("日付が有効:", is_valid_date(date_to_check))
日付が有効: True

時刻の範囲チェック

時刻が特定の範囲内にあるかを確認する方法を示します。

以下のコードでは、指定した時刻が午前9時から午後5時までの範囲内にあるかをチェックしています。

import datetime
def is_valid_time(time_to_check):
    start_time = datetime.time(9, 0, 0)  # 09:00:00
    end_time = datetime.time(17, 0, 0)   # 17:00:00
    return start_time <= time_to_check <= end_time

# チェックする時刻
time_to_check = datetime.time(14, 30, 0)  # 14:30:00
print("時刻が有効:", is_valid_time(time_to_check))
時刻が有効: True

日付と時刻のソート

日付や時刻をソートすることで、データを整理することができます。

以下では、リストと辞書のソート方法を示します。

リストのソート

datetimeオブジェクトのリストをソートする方法を示します。

以下のコードでは、日付のリストを昇順にソートしています。

import datetime
date_list = [
    datetime.datetime(2023, 10, 1),
    datetime.datetime(2023, 5, 15),
    datetime.datetime(2023, 8, 20),
]
date_list.sort()
print("ソートされた日付リスト:")
for date in date_list:
    print(date)
ソートされた日付リスト:
2023-05-15 00:00:00
2023-08-20 00:00:00
2023-10-01 00:00:00

辞書のソート

辞書のキーとして日付を使用している場合、辞書を日付でソートする方法を示します。

以下のコードでは、日付をキーとする辞書をソートしています。

import datetime
date_dict = {
    datetime.datetime(2023, 10, 1): "イベントA",
    datetime.datetime(2023, 5, 15): "イベントB",
    datetime.datetime(2023, 8, 20): "イベントC",
}
# 日付でソート
sorted_dict = dict(sorted(date_dict.items()))
print("ソートされた辞書:")
for date, event in sorted_dict.items():
    print(date, ":", event)
ソートされた辞書:
2023-05-15 00:00:00 : イベントB
2023-08-20 00:00:00 : イベントC
2023-10-01 00:00:00 : イベントA

このように、日付と時刻のバリデーションやソートを行うことで、データの整合性を保ち、整理することができます。

よくある質問

datetimeとdate、timeの違いは?

datetimeは日付と時刻の両方を表すクラスで、年、月、日、時、分、秒、マイクロ秒を含みます。

一方、dateは日付のみ(年、月、日)を表し、timeは時刻のみ(時、分、秒、マイクロ秒)を表します。

つまり、datetimeは両方の情報を持つのに対し、datetimeはそれぞれの情報だけを持っています。

datetimeモジュールとtimeモジュールの違いは?

datetimeモジュールは日付と時刻を扱うためのクラスを提供しており、datetimedatetimetimedeltaなどが含まれています。

一方、timeモジュールは主に時間に関する関数を提供しており、時間の取得やスリープなどの機能が中心です。

datetimeモジュールはより高機能で、日付と時刻の計算やフォーマットが可能です。

日付と時刻のフォーマットがうまくいかない場合の対処法

日付と時刻のフォーマットがうまくいかない場合は、以下の点を確認してください。

  • 使用しているフォーマットコードが正しいか確認する(例:%Y%m%dなど)。
  • 文字列の日付が指定したフォーマットに一致しているか確認する。
  • strptime()strftime()の引数が正しく設定されているか確認する。

まとめ

この記事では、Pythonのdatetimeモジュールを使った日付と時刻の扱い方について詳しく解説しました。

日付や時刻の取得、フォーマット、計算、タイムゾーンの扱い、さらにはバリデーションやソートの方法まで幅広くカバーしました。

これを機に、実際のプロジェクトでdatetimeモジュールを活用し、日付や時刻の管理を効率化してみてください。

  • URLをコピーしました!
目次から探す