【Python】日付(年月日)をdatetimeで扱う方法

この記事では、Pythonのdatetimeモジュールを使用して日付データを扱う方法について解説します。

日付データの作成方法からフォーマット変換、計算、比較、操作まで、具体的なサンプルコードを通じてわかりやすく説明します。

Pythonで日付データを操作する基本的な手法を学ぶことができます。

目次から探す

日付データの作成方法

文字列からdatetimeオブジェクトを作成する方法

Pythonのdatetimeモジュールを使用すると、文字列からdatetimeオブジェクトを簡単に作成することができます。

以下はその方法を示すサンプルコードです。

from datetime import datetime

date_str = "2022-10-15"
date_obj = datetime.strptime(date_str, "%Y-%m-%d")
print(date_obj)
2022-10-15 00:00:00

このコードでは、2022-10-15という文字列をdatetimeオブジェクトに変換しています。

strptime()メソッドを使用し、変換したい文字列とそのフォーマットを指定します。

年月日を指定してdatetimeオブジェクトを作成する方法

特定の年、月、日を指定してdatetimeオブジェクトを作成する方法もあります。

以下はその方法を示すサンプルコードです。

from datetime import datetime

date_obj = datetime(year=2022, month=10, day=15)
print(date_obj)
2022-10-15 00:00:00

このコードでは、年に2022、月に10、日に15を指定してdatetimeオブジェクトを作成しています。

datetime()関数を使用し、引数として年、月、日を指定します。

日付データのフォーマット変換

日付データを文字列に変換する方法

Pythonのdatetimeモジュールを使用して、日付データを文字列に変換する方法を紹介します。

datetimeオブジェクトのstrftime()メソッドを使用することで、指定したフォーマットの文字列に変換することができます。

以下にサンプルコードを示します。

import datetime

# 現在の日付を取得
now = datetime.datetime.now()

# 日付データを文字列に変換
date_str = now.strftime("%Y-%m-%d %H:%M:%S")
print(date_str)
2024-02-14 06:56:48

上記のコードでは、現在の日付を取得し、strftime()メソッドを使って%Y-%m-%d %H:%M:%Sのフォーマットに従って文字列に変換しています。

実行すると、指定したフォーマットの文字列が出力されます。

日付データを指定したフォーマットで表示する方法

日付データを特定のフォーマットで表示する際には、strftime()メソッドを使用してフォーマットを指定します。

以下に例を示します。

import datetime

# 日付データを作成
date = datetime.datetime(2022, 9, 15)

# 指定したフォーマットで日付を表示
formatted_date = date.strftime("%A, %B %d, %Y")
print(formatted_date)
Thursday, September 15, 2022

上記のコードでは、2022年9月15日の日付データを作成し、strftime()メソッドを用いて%A, %B %d, %Yのフォーマットで表示しています。

実行すると、曜日、月、日、年が含まれた文字列が出力されます。

日付データの計算

日付の加算と減算

Pythonのdatetimeモジュールを使用すると、日付データに対して簡単に加算や減算を行うことができます。

日付データに対してtimedeltaを使用することで、日数単位での加算や減算が可能です。

以下に具体的な例を示します。

from datetime import datetime, timedelta

# 現在の日付を取得
current_date = datetime.now()

# 10日後の日付を計算
future_date = current_date + timedelta(days=10)
print(f"10日後の日付: {future_date}")

# 2週間前の日付を計算
past_date = current_date - timedelta(weeks=2)
print(f"2週間前の日付: {past_date}")
10日後の日付: 2024-02-24 06:56:59.466517
2週間前の日付: 2024-01-31 06:56:59.466517

上記のコードでは、現在の日付を取得し、それに対して10日後と2週間前の日付を計算しています。

timedeltaに日数や週数を指定することで、日付データを加算したり減算したりすることができます。

日付の差分を計算する方法

日付データ同士の差分を計算する際も、datetimeモジュールを使用して簡単に行うことができます。

以下に例を示します。

from datetime import datetime

# 2つの日付を定義
date1 = datetime(2022, 5, 15)
date2 = datetime(2022, 5, 10)

# 日付の差分を計算
date_diff = date1 - date2
print(f"日付の差分: {date_diff}")
日付の差分: 5 days, 0:00:00

上記のコードでは、datetimeオブジェクト同士を引き算することで、日付の差分を取得しています。

差分はtimedeltaオブジェクトとして返され、日数や秒数などの情報を含んでいます。

日付データの比較

日付の大小比較

Pythonのdatetimeモジュールを使用して、日付データ同士を比較することができます。

比較演算子を使って、日付の大小関係を確認できます。

例えば、以下のサンプルコードでは、2つの日付データを比較しています。

from datetime import datetime

date1 = datetime(2022, 5, 10)
date2 = datetime(2022, 5, 15)

if date1 < date2:
    print("date1はdate2よりも前の日付です")
elif date1 > date2:
    print("date1はdate2よりも後の日付です")
else:
    print("date1とdate2は同じ日付です")
date1はdate2よりも前の日付です

このコードでは、date1date2を比較し、それぞれの日付が前後どちらかを判定しています。

日付の等値比較

日付データ同士が等しいかどうかを比較する場合も、比較演算子を使用します。

以下のサンプルコードでは、2つの日付データが等しいかどうかを判定しています。

from datetime import datetime

date1 = datetime(2022, 5, 10)
date2 = datetime(2022, 5, 10)

if date1 == date2:
    print("date1とdate2は同じ日付です")
else:
    print("date1とdate2は異なる日付です")
date1とdate2は同じ日付です

このコードでは、date1date2が同じ日付かどうかを判定し、結果を出力しています。

日付データ同士の比較は、プログラムで日付処理を行う際に重要な要素となります。

日付データの操作

日付データの年、月、日の取得

Pythonのdatetimeモジュールを使用すると、日付データから年、月、日を取得することができます。

以下はサンプルコードです。

from datetime import datetime

# 現在の日付データを取得
now = datetime.now()

# 年、月、日を取得
year = now.year
month = now.month
day = now.day

print(f"年: {year}, 月: {month}, 日: {day}")
年: 2024, 月: 2, 日: 14

上記のコードでは、現在の日付データを取得し、year、month、dayに年、月、日をそれぞれ格納しています。

日付データの曜日の取得

日付データから曜日を取得するには、weekday()メソッドを使用します。

0が月曜日、6が日曜日を表します。

以下はサンプルコードです。

from datetime import datetime

# 日付データを作成
date_str = "2023-09-15"
date = datetime.strptime(date_str, "%Y-%m-%d")

# 曜日を取得
weekday = date.weekday()

# 曜日を日本語で表示
weekdays = ["月", "火", "水", "木", "金", "土", "日"]
weekday_jp = weekdays[weekday]

print(f"曜日: {weekday_jp}")
曜日: 金

上記のコードでは、指定した日付データから曜日を取得し、日本語で表示しています。

曜日を表す数字をweekdaysリストのインデックスとして使用して、曜日を取得しています。

目次から探す