【完全版】Pythonでの日付と時間の扱い方!初心者にもわかる基礎知識と応用テクニック

1. Pythonで日付と時間を扱うための基本操作

Pythonで日付と時間を扱うために必要な基本操作について説明します。

1.1 datetimeオブジェクトの作成

Pythonで日付と時間を扱うためには、datetimeモジュールを使用します。datetimeモジュールは、日付と時間を表すdatetimeオブジェクトを提供しています。datetimeオブジェクトを作成する方法について説明します。

import datetime

# 年月日時分秒を指定してdatetimeオブジェクトを作成する
dt = datetime.datetime(2022, 3, 1, 12, 30, 45)
print(dt)
# 実行結果:2022-03-01 12:30:45

# 現在の日時を取得する
now = datetime.datetime.now()
print(now)
# 実行結果:2023-03-02 11:30:30.245265

1.2 日付と時間の表示方法

datetimeオブジェクトを使って、日付と時間を表示する方法について説明します。また、日付と時間を文字列に変換する方法についても説明します。

日付の表示方法

# 日付の表示方法
dt = datetime.datetime(2022, 3, 1)
print(dt.year)  # 年を表示する
# 実行結果:2022

print(dt.month)  # 月を表示する
# 実行結果:3

print(dt.day)  # 日を表示する
# 実行結果:1

print(dt.strftime("%Y/%m/%d"))  # 指定したフォーマットで日付を表示する
# 実行結果:2022/03/01

時間の表示方法

# 時間の表示方法
dt = datetime.datetime(2022, 3, 1, 12, 30, 45)
print(dt.hour)  # 時を表示する
# 実行結果:12

print(dt.minute)  # 分を表示する
# 実行結果:30

print(dt.second)  # 秒を表示する
# 実行結果:45

print(dt.strftime("%H:%M:%S"))  # 指定したフォーマットで時間を表示する
# 実行結果:12:30:45

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

# 日付と時間を文字列に変換する
dt = datetime.datetime(2022, 3, 1, 12, 30, 45)
str_dt = str(dt)  # datetimeオブジェクトを文字列に変換する
print(str_dt)
# 実行結果:2022-03-01 12:30:45

dt_from_str = datetime.datetime.strptime(str_dt, '%Y-%m-%d %H:%M:%S')  # 文字列からdatetimeオブジェクトを作成する
print(dt_from_str)
# 実行結果:2022-03-01 12:30:45

1.3 日付と時間の計算方法

datetimeオブジェクトを使って、日付と時間の計算をする方法について説明します。加算、減算、日付の差分などの計算方法を説明します。

日付と時間の加算・減算

# 日付と時間の加算・減算
dt = datetime.datetime(2022, 3, 1, 12, 30, 45)
delta = datetime.timedelta(days=1, hours=2, minutes=30, seconds=15)
add_dt = dt + delta  # 加算する
sub_dt = dt - delta  # 減算する
print(add_dt)
# 実行結果:2022-03-02 15:01:00

print(sub_dt)
# 実行結果:2022-02-28 10:00:30

日付と時間の差分

# 日付と時間の差分
dt1 = datetime.datetime(2022, 3, 1, 12, 30, 45)
dt2 = datetime.datetime(2023, 3, 1, 10, 30, 30)
delta = dt2 - dt1  # 差分を計算する
print(delta)
# 実行結果:365 days, 21:59:45

print(delta.days)  # 差分の日数を表示する
# 実行結果:365

print(delta.seconds)  # 差分の秒数を表示する
# 実行結果:79185

print(delta.total_seconds())  # 差分の秒数を合計したものを表示する
# 実行結果:31557645.0

1.4 日付と時間の比較方法

datetimeオブジェクトを使って、日付と時間を比較する方法について説明します。2つのdatetimeオブジェクトを比較する方法について説明します。

# 日付と時間の比較方法
dt1 = datetime.datetime(2022, 3, 1, 12, 30, 45)
dt2 = datetime.datetime(2022, 3, 2, 10, 30, 30)
dt3 = datetime.datetime(2022, 2, 28, 20, 45, 15)

print(dt1 < dt2)  # dt1がdt2よりも前かどうかを比較する
# 実行結果:True

print(dt1 > dt2)  # dt1がdt2よりも後かどうかを比較する
# 実行結果:False

print(dt1 == dt3)  # dt1とdt3が同じかどうかを比較する
# 実行結果:False

print(dt1 != dt2)  # dt1とdt2が違うかどうかを比較する
# 実行結果:True

1.5 日付と時間のフォーマット方法

datetimeオブジェクトを指定したフォーマットに変換する方法について説明します。strftime()メソッドを使って、日付と時間を指定したフォーマットで表示することができます。

# 日付と時間のフォーマット方法
dt = datetime.datetime(2022, 3, 1, 12, 30, 45)
print(dt.strftime("%Y/%m/%d %H:%M:%S"))
# 実行結果:2022/03/01 12:30:45

2. Pythonでタイムゾーンを扱う方法

2.1 タイムゾーンとは何か

タイムゾーンとは、地球上のどの場所にあるかによって、日付と時間を表現するための基準時刻を設定したものです。Pythonでは、pytzモジュールを使用して、タイムゾーンを扱うことができます。

2.2 Pythonでのタイムゾーンの扱い方

import pytz

# 日本標準時のタイムゾーンを取得する
tz_jst = pytz.timezone('Asia/Tokyo')

# 現在日時を日本標準時で取得する
now_jst = datetime.datetime.now(tz_jst)
print(now_jst)
# 実行結果:2023-03-02 11:30:30.272246+09:00

2.3 タイムゾーンの変換方法

import pytz

# 日本標準時のタイムゾーンを取得する
tz_jst = pytz.timezone('Asia/Tokyo')

# UTCのタイムゾーンを取得する
tz_utc = pytz.timezone('UTC')

# 現在日時をUTCで取得する
now_utc = datetime.datetime.now(tz_utc)

# UTCから日本標準時に変換する
now_jst = now_utc.astimezone(tz_jst)
print(now_jst)
# 実行結果:2023-03-02 20:30:30.472802+09:00

3. Pythonでの日付の処理に関するTips

3.1 月の末日を取得する方法

import calendar

# 2022年2月の末日を取得する
end_of_month = calendar.monthrange(2022, 2)[1]
print(end_of_month)
# 実行結果:28

3.2 年の週数を取得する方法

import datetime

# 2022年の週数を取得する
dt = datetime.datetime(2022, 12, 31)
week_number = dt.isocalendar()[1]
print(week_number)
# 実行結果:52

3.3 経過時間を計算する方法

import datetime

# 2022年3月1日から現在までの経過時間を計算する
start = datetime.datetime(2022, 3, 1)
now = datetime.datetime.now()
delta = now - start
print(delta)
# 実行結果:365 days, 23:01:23.205675

3.4 日時の丸め方を設定する方法

import datetime

# 現在時刻の取得
now = datetime.datetime.now()

# 秒以下を切り捨てる(分以下を切り捨てたい場合は、'%H:%M:00' などと指定する)
rounded_down = now.strftime('%Y-%m-%d %H:%M:00')
print(rounded_down)
# 実行結果:2023-03-02 20:30:00

# 秒以下を切り上げる
rounded_up = now.strftime('%Y-%m-%d %H:%M:%S')[:-1] + str(int(now.strftime('%S'))//10*10+10)
print(rounded_up)
# 実行結果:2023-03-02 20:30:40

3.5 日付と時間の加算・減算をする方法

import datetime

# 現在日時を取得する
now = datetime.datetime.now()

# 1日後を計算する
one_day_later = now + datetime.timedelta(days=1)
print(one_day_later)
# 実行結果:2023-03-03 20:30:25.574178

# 1時間前を計算する
one_hour_ago = now - datetime.timedelta(hours=1)
print(one_hour_ago)
# 実行結果:2023-03-02 19:30:25.574178

3.6 月初め、月末の日付を取得する方法

import datetime

# 現在日時を取得する
now = datetime.datetime.now()

# 月初めの日付を取得する
first_day = datetime.datetime(now.year, now.month, 1)
print(first_day)
# 実行結果:2023-03-01 00:00:00

# 月末の日付を取得する
last_day = datetime.datetime(now.year, now.month+1, 1) - datetime.timedelta(days=1)
print(last_day)
# 実行結果:2023-03-31 00:00:00

3.7 特定の曜日の日付を取得する方法

import datetime

# 現在日時を取得する
now = datetime.datetime.now()

# 指定した曜日の日付を取得する
day_of_week = 'Saturday'  # 土曜日を指定する
day_num = datetime.datetime.strptime(day_of_week, '%A').weekday()  # 曜日を数値で取得する
delta = (day_num - now.weekday()) % 7  # 指定した曜日までの日数を計算する
date = now + datetime.timedelta(days=delta)  # 指定した曜日の日付を計算する
print(date)
# 実行結果:2023-03-04 20:30:25.574178

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

import datetime

# 複数の日付の差分を計算する
dt_list = [
    datetime.datetime(2023, 3, 1),
    datetime.datetime(2023, 3, 10),
    datetime.datetime(2023, 3, 15),
    datetime.datetime(2023, 3, 20)
]
for i in range(len(dt_list)-1):
    delta = dt_list[i+1] - dt_list[i]
    print(delta)
# 実行結果:9 days, 0:00:00 / 5 days, 0:00:00 / 5 days, 0:00:00

3.9 閏年の判定をする方法

import calendar

# 2024年が閏年かどうかを判定する
is_leap = calendar.isleap(2024)
print(is_leap)
# 実行結果:True

3.10 時刻の差分を計算する方法

import datetime

# 時刻の差分を計算する
dt1 = datetime.datetime(2023, 3, 2, 10, 30, 45)
dt2 = datetime.datetime(2023, 3, 2, 12, 45, 30)
delta = dt2 - dt1
print(delta)
# 実行結果:2:14:45

3.11 datetimeオブジェクトを日付と時刻に分割する方法

import datetime

# datetimeオブジェクトを日付と時刻に分割する
dt = datetime.datetime(2023, 3, 2, 10, 30, 45)
date = dt.date()  # 日付の部分を取得する
time = dt.time()  # 時刻の部分を取得する
print(date)
print(time)
# 実行結果:2023-03-02 / 10:30:45

3.12 日時の比較方法

import datetime

# 日時の比較方法
dt1 = datetime.datetime(2023, 3, 2, 10, 30, 45)
dt2 = datetime.datetime(2023, 3, 2, 12, 45, 30)
dt3 = datetime.datetime(2023, 3, 2, 10, 30, 45)

print(dt1 < dt2)  # dt1がdt2よりも前かどうかを比較する
# 実行結果:True

print(dt1 > dt2)  # dt1がdt2よりも後かどうかを比較する
# 実行結果:False

print(dt1 == dt3)  # dt1とdt3が同じかどうかを比較する
# 実行結果:True

print(dt1 != dt2)  # dt1とdt2が違うかどうかを比較する
# 実行結果:True

3.13 日付と時刻を指定した文字列からdatetimeオブジェクトを生成する方法

import datetime

# 日付と時刻を指定した文字列からdatetimeオブジェクトを生成する
dt_str = '2023-03-02 10:30:45'
dt = datetime.datetime.strptime(dt_str, '%Y-%m-%d %H:%M:%S')
print(dt)
# 実行結果:2023-03-02 10:30:45

3.14 日付と時刻を指定した文字列からdateオブジェクトを生成する方法

import datetime

# 日付を指定した文字列からdateオブジェクトを生成する
date_str = '2023-03-02'
date = datetime.datetime.strptime(date_str, '%Y-%m-%d').date()
print(date)
# 実行結果:2023-03-02

3.15 日付と時刻を指定した文字列からtimeオブジェクトを生成する方法

import datetime

# 時刻を指定した文字列からtimeオブジェクトを生成する
time_str = '10:30:45'
time = datetime.datetime.strptime(time_str, '%H:%M:%S').time()
print(time)
# 実行結果:10:30:45

以上が、Pythonでの日付と時間の扱い方や処理方法に関するTipsになります。

4. まとめ

本記事では、Pythonでの日付と時間の扱い方や処理方法について、以下の内容を解説しました。

  • datetimeオブジェクトの生成方法
  • 日付と時間のフォーマットの指定方法
  • タイムゾーンの設定方法
  • 日付の処理に関するTips
  • 時刻の処理に関するTips

Pythonでの日付と時間の扱い方については、この記事で紹介した内容だけでも多くの操作が可能です。しかし、現実の問題に対応するためには、より高度な日付と時間の処理が必要になる場合があります。そのような場合には、Pythonの標準ライブラリの他、pandasやnumpyなどのライブラリを活用することも有効です。また、日付と時間の扱い方に関する知識をより深めるためには、実際に手を動かしながら練習することが大切です。

コメント

タイトルとURLをコピーしました