【Python】日時を扱うdatetimeの使い方

この記事では、Pythonのdatetimeモジュールを使って、現在の日付と時刻を取得する方法、特定の日付や時刻を設定する方法、日付や時刻のフォーマットを変換する方法、日付や時刻の計算方法、そしてタイムゾーンの扱い方まで、初心者でもわかりやすく解説します。

具体的なサンプルコードもたくさん紹介するので、実際に手を動かしながら学んでみましょう。

これを読めば、日付や時刻の操作がもっと簡単にできるようになりますよ!

目次から探す

datetimeモジュールの概要

Pythonで日付や時刻を扱う際に非常に便利なのがdatetimeモジュールです。

このモジュールを使うことで、現在の日付や時刻の取得、特定の日付や時刻の設定、日付や時刻の計算、フォーマットの変換など、さまざまな操作が簡単に行えます。

datetimeモジュールとは

datetimeモジュールは、Pythonの標準ライブラリの一部であり、日付と時刻を操作するためのクラスや関数が含まれています。

主に以下の4つのクラスが提供されています。

クラス名説明
datetime.date年、月、日を扱うクラス
datetime.time時、分、秒、マイクロ秒を扱うクラス
datetime.datetime日付と時刻を扱うクラス
datetime.timedelta日付や時刻の差を扱うクラス

これらのクラスを使うことで、日付や時刻に関するさまざまな操作が可能になります。

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

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

インポートの方法は非常に簡単で、以下のように記述します。

import datetime

これで、datetimeモジュール内のクラスや関数を使用する準備が整いました。

例えば、現在の日付と時刻を取得するには、以下のようにします。

import datetime
# 現在の日付と時刻を取得
now = datetime.datetime.now()
print(now)

このコードを実行すると、現在の日付と時刻が表示されます。

例えば、2023-10-05 14:30:00.123456のような形式で出力されます。

また、特定のクラスだけをインポートすることも可能です。

例えば、datetimeクラスだけをインポートする場合は、以下のように記述します。

from datetime import datetime
# 現在の日付と時刻を取得
now = datetime.now()
print(now)

このようにすることで、コードが少し簡潔になります。

datetimeモジュールを使いこなすことで、日付や時刻に関する操作が非常に簡単になりますので、ぜひ活用してみてください。

日付と時刻の基本操作

Pythonのdatetimeモジュールを使うことで、日付や時刻を簡単に操作することができます。

ここでは、現在の日付と時刻の取得方法や、特定の日付と時刻の設定方法について詳しく解説します。

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

datetime.now()の使い方

datetime.now()メソッドを使うと、現在のローカルな日付と時刻を取得することができます。

以下はその使用例です。

from datetime import datetime
# 現在の日時を取得
now = datetime.now()
print(now)

このコードを実行すると、以下のような出力が得られます。

2023-10-05 14:23:45.123456

このように、datetime.now()は現在の年、月、日、時、分、秒、マイクロ秒を含むdatetimeオブジェクトを返します。

datetime.today()の使い方

datetime.today()メソッドも現在の日付と時刻を取得するために使われますが、datetime.now()とほぼ同じ動作をします。

以下はその使用例です。

from datetime import datetime
# 現在の日時を取得
today = datetime.today()
print(today)

このコードを実行すると、以下のような出力が得られます。

2023-10-05 14:23:45.123456

datetime.today()datetime.now()と同様に、現在の年、月、日、時、分、秒、マイクロ秒を含むdatetimeオブジェクトを返します。

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

datetimeオブジェクトの生成

特定の日付と時刻を設定するには、datetimeオブジェクトを生成します。

以下はその使用例です。

from datetime import datetime
# 特定の日時を設定
specific_datetime = datetime(2023, 10, 5, 14, 30, 0)
print(specific_datetime)

このコードを実行すると、以下のような出力が得られます。

2023-10-05 14:30:00

このように、datetimeオブジェクトを生成する際には、年、月、日、時、分、秒を指定します。

dateオブジェクトの生成

日付のみを扱いたい場合は、dateオブジェクトを生成します。

以下はその使用例です。

from datetime import date
# 特定の日付を設定
specific_date = date(2023, 10, 5)
print(specific_date)

このコードを実行すると、以下のような出力が得られます。

2023-10-05

このように、dateオブジェクトを生成する際には、年、月、日を指定します。

timeオブジェクトの生成

時刻のみを扱いたい場合は、timeオブジェクトを生成します。

以下はその使用例です。

from datetime import time
# 特定の時刻を設定
specific_time = time(14, 30, 0)
print(specific_time)

このコードを実行すると、以下のような出力が得られます。

14:30:00

このように、timeオブジェクトを生成する際には、時、分、秒を指定します。

以上が、Pythonのdatetimeモジュールを使った日付と時刻の基本操作です。

これらの基本操作を理解することで、より複雑な日時の操作も簡単に行えるようになります。

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

Pythonのdatetimeモジュールを使うと、日付と時刻をさまざまな形式でフォーマットすることができます。

ここでは、日付と時刻を文字列に変換する方法と、文字列を日付と時刻に変換する方法について詳しく解説します。

日付と時刻を文字列に変換する

日付と時刻を文字列に変換するためには、strftime()メソッドを使用します。

このメソッドは、指定したフォーマットに従ってdatetimeオブジェクトを文字列に変換します。

strftime()の使い方

strftime()メソッドの基本的な使い方は以下の通りです。

from datetime import datetime
# 現在の日時を取得
now = datetime.now()
# 日付と時刻を文字列に変換
formatted_date = now.strftime('%Y-%m-%d %H:%M:%S')
print(formatted_date)  # 例: 2023-10-01 12:34:56

上記のコードでは、%Y-%m-%d %H:%M:%Sというフォーマットを指定して、現在の日時を「年-月-日 時:分:秒」の形式で文字列に変換しています。

フォーマットコード一覧

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

フォーマットコード説明
%Y西暦(4桁)2023
%y西暦(2桁)23
%m月(01-12)10
%d日(01-31)01
%H時(00-23)12
%M分(00-59)34
%S秒(00-59)56
%A曜日(英語)Sunday
%a曜日(短縮形)Sun
%B月名(英語)October
%b月名(短縮形)Oct

これらのフォーマットコードを組み合わせることで、さまざまな形式で日付と時刻を文字列に変換することができます。

文字列を日付と時刻に変換する

文字列を日付と時刻に変換するためには、strptime()メソッドを使用します。

このメソッドは、指定したフォーマットに従って文字列をdatetimeオブジェクトに変換します。

strptime()の使い方

strptime()メソッドの基本的な使い方は以下の通りです。

from datetime import datetime
# 文字列を日付と時刻に変換
date_string = '2023-10-01 12:34:56'
date_object = datetime.strptime(date_string, '%Y-%m-%d %H:%M:%S')
print(date_object)  # 例: 2023-10-01 12:34:56

上記のコードでは、%Y-%m-%d %H:%M:%Sというフォーマットを指定して、文字列をdatetimeオブジェクトに変換しています。

フォーマットコードの適用例

strptime()メソッドで使用するフォーマットコードは、strftime()メソッドと同じです。

以下にいくつかの適用例を示します。

from datetime import datetime
# 例1: 年月日のみを含む文字列を変換
date_string1 = '2023-10-01'
date_object1 = datetime.strptime(date_string1, '%Y-%m-%d')
print(date_object1)  # 例: 2023-10-01 00:00:00
# 例2: 時刻のみを含む文字列を変換
time_string = '12:34:56'
time_object = datetime.strptime(time_string, '%H:%M:%S')
print(time_object)  # 例: 1900-01-01 12:34:56
# 例3: 英語の月名を含む文字列を変換
date_string2 = 'October 1, 2023'
date_object2 = datetime.strptime(date_string2, '%B %d, %Y')
print(date_object2)  # 例: 2023-10-01 00:00:00

これらの例では、異なるフォーマットの文字列をdatetimeオブジェクトに変換しています。

strptime()メソッドを使用することで、さまざまな形式の文字列を簡単に日付と時刻に変換することができます。

日付と時刻の計算

Pythonのdatetimeモジュールを使うと、日付や時刻の計算が簡単に行えます。

特にtimedeltaオブジェクトを使うことで、日付や時刻の加算・減算が容易になります。

ここでは、timedeltaオブジェクトの基本操作から、日付や時刻の差を計算する方法までを詳しく解説します。

timedeltaオブジェクトの使い方

timedeltaの基本操作

timedeltaオブジェクトは、日付や時刻の差を表現するためのオブジェクトです。

例えば、1日や1時間の差を表現することができます。

以下は、timedeltaオブジェクトの基本的な使い方です。

from datetime import timedelta
# 1日の差を表現するtimedeltaオブジェクト
one_day = timedelta(days=1)
print(one_day)  # 出力: 1 day, 0:00:00
# 1時間の差を表現するtimedeltaオブジェクト
one_hour = timedelta(hours=1)
print(one_hour)  # 出力: 1:00:00
# 1分の差を表現するtimedeltaオブジェクト
one_minute = timedelta(minutes=1)
print(one_minute)  # 出力: 0:01:00

日付の加算と減算

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

以下の例では、現在の日付に1日を加算したり、特定の日付から1週間を減算したりする方法を示します。

from datetime import datetime, timedelta
# 現在の日付と時刻を取得
now = datetime.now()
print("現在の日付と時刻:", now)
# 1日を加算
tomorrow = now + timedelta(days=1)
print("1日後の日付と時刻:", tomorrow)
# 1週間を減算
last_week = now - timedelta(weeks=1)
print("1週間前の日付と時刻:", last_week)

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

日付や時刻の差を計算することもdatetimeモジュールを使えば簡単です。

ここでは、日付の差と時刻の差を求める方法を解説します。

日付の差を求める

2つの日付の差を求めるには、datetimeオブジェクト同士の引き算を行います。

以下の例では、2つの日付の差を求める方法を示します。

from datetime import datetime
# 2つの日付を設定
date1 = datetime(2023, 10, 1)
date2 = datetime(2023, 10, 15)
# 日付の差を計算
difference = date2 - date1
print("日付の差:", difference)  # 出力: 14 days, 0:00:00

時刻の差を求める

時刻の差を求める場合も、datetimeオブジェクト同士の引き算を行います。

以下の例では、2つの時刻の差を求める方法を示します。

from datetime import datetime
# 2つの時刻を設定
time1 = datetime(2023, 10, 1, 12, 0, 0)
time2 = datetime(2023, 10, 1, 15, 30, 0)
# 時刻の差を計算
time_difference = time2 - time1
print("時刻の差:", time_difference)  # 出力: 3:30:00

このように、datetimeモジュールを使うことで、日付や時刻の計算が非常に簡単に行えます。

timedeltaオブジェクトを活用することで、日付や時刻の加算・減算、差の計算が直感的に行えるようになります。

タイムゾーンの扱い

Pythonの標準ライブラリであるdatetimeモジュールは、タイムゾーンの扱いに関しても強力な機能を提供しています。

特に、pytzモジュールを使うことで、世界中のタイムゾーンを簡単に扱うことができます。

このセクションでは、タイムゾーンの基本的な使い方と、タイムゾーンの変換方法について解説します。

タイムゾーンの基本

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

まず、タイムゾーンを扱うためにはpytzモジュールをインポートする必要があります。

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

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

pip install pytz

インストールが完了したら、以下のようにインポートします。

import pytz

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

次に、タイムゾーン付きのdatetimeオブジェクトを生成する方法を見ていきましょう。

pytzを使うことで、特定のタイムゾーンを設定したdatetimeオブジェクトを簡単に作成できます。

from datetime import datetime
import pytz
# タイムゾーンを指定して現在の日時を取得
tokyo_tz = pytz.timezone('Asia/Tokyo')
tokyo_now = datetime.now(tokyo_tz)
print("東京の現在の日時:", tokyo_now)

このコードでは、pytz.timezone('Asia/Tokyo')を使って東京のタイムゾーンを取得し、そのタイムゾーンを使って現在の日時を取得しています。

タイムゾーンの変換

タイムゾーンの設定

既存のdatetimeオブジェクトにタイムゾーンを設定することも可能です。

以下の例では、UTC(協定世界時)のdatetimeオブジェクトに東京のタイムゾーンを設定しています。

from datetime import datetime
import pytz
# UTCの現在の日時を取得
utc_now = datetime.utcnow()
# UTCのdatetimeオブジェクトにタイムゾーンを設定
utc_now = utc_now.replace(tzinfo=pytz.utc)
print("UTCの現在の日時:", utc_now)
# 東京のタイムゾーンを設定
tokyo_tz = pytz.timezone('Asia/Tokyo')
tokyo_now = utc_now.astimezone(tokyo_tz)
print("東京の現在の日時:", tokyo_now)

このコードでは、datetime.utcnow()で取得したUTCの現在の日時に対して、replace(tzinfo=pytz.utc)を使ってUTCのタイムゾーンを設定しています。

その後、astimezone(tokyo_tz)を使って東京のタイムゾーンに変換しています。

タイムゾーンの変更

既にタイムゾーンが設定されているdatetimeオブジェクトのタイムゾーンを変更することもできます。

以下の例では、ニューヨークのタイムゾーンに変更しています。

from datetime import datetime
import pytz
# 東京の現在の日時を取得
tokyo_tz = pytz.timezone('Asia/Tokyo')
tokyo_now = datetime.now(tokyo_tz)
print("東京の現在の日時:", tokyo_now)
# ニューヨークのタイムゾーンを設定
ny_tz = pytz.timezone('America/New_York')
ny_now = tokyo_now.astimezone(ny_tz)
print("ニューヨークの現在の日時:", ny_now)

このコードでは、東京の現在の日時を取得し、その日時をニューヨークのタイムゾーンに変換しています。

astimezoneメソッドを使うことで、簡単にタイムゾーンを変更できます。

以上が、Pythonでタイムゾーンを扱う基本的な方法とタイムゾーンの変換方法です。

pytzモジュールを使うことで、世界中のタイムゾーンを簡単に扱うことができるので、ぜひ活用してみてください。

実用的な例

日付の範囲を生成する

Pythonのdatetimeモジュールを使って、特定の期間の日付の範囲を生成することができます。

例えば、ある期間の全ての日付をリストとして取得したい場合に便利です。

以下は、開始日と終了日を指定して、その範囲内の日付をリストとして生成する例です。

from datetime import datetime, timedelta
# 開始日と終了日を設定
start_date = datetime(2023, 1, 1)
end_date = datetime(2023, 1, 10)
# 日付の範囲を生成
date_list = []
current_date = start_date
while current_date <= end_date:
    date_list.append(current_date)
    current_date += timedelta(days=1)
# 結果を表示
for date in date_list:
    print(date.strftime('%Y-%m-%d'))

このコードでは、start_dateからend_dateまでの日付を1日ずつ増やしながらリストに追加しています。

timedelta(days=1)を使って1日ずつ加算しています。

日付のリストを生成する

特定の条件に基づいて日付のリストを生成することも可能です。

例えば、毎週月曜日の日付をリストとして取得したい場合などです。

以下は、特定の期間内の毎週月曜日の日付をリストとして生成する例です。

from datetime import datetime, timedelta
# 開始日と終了日を設定
start_date = datetime(2023, 1, 1)
end_date = datetime(2023, 1, 31)
# 毎週月曜日の日付を生成
monday_list = []
current_date = start_date
while current_date <= end_date:
    if current_date.weekday() == 0:  # 月曜日はweekday()が0
        monday_list.append(current_date)
    current_date += timedelta(days=1)
# 結果を表示
for date in monday_list:
    print(date.strftime('%Y-%m-%d'))

このコードでは、current_date.weekday() == 0を使って月曜日を判定し、該当する日付をリストに追加しています。

日付のバリデーション

ユーザーから入力された日付が有効かどうかを確認するために、日付のバリデーションを行うことができます。

例えば、ユーザーが入力した日付が正しい形式であるか、存在する日付であるかをチェックすることが重要です。

以下は、ユーザーが入力した日付が有効かどうかを確認する例です。

from datetime import datetime
def validate_date(date_str):
    try:
        # 日付の形式を指定してパース
        date = datetime.strptime(date_str, '%Y-%m-%d')
        return True
    except ValueError:
        return False
# ユーザー入力の日付
user_input = '2023-02-30'
# バリデーションを実行
if validate_date(user_input):
    print(f"{user_input} は有効な日付です。")
else:
    print(f"{user_input} は無効な日付です。")

このコードでは、datetime.strptime()を使って日付文字列をパースし、ValueErrorが発生しないかどうかで有効性を判断しています。

例えば、2023-02-30のような存在しない日付を入力すると、ValueErrorが発生し、無効な日付として判定されます。

これらの実用的な例を通じて、datetimeモジュールの活用方法を理解し、日付や時刻を効果的に操作できるようになるでしょう。

目次から探す