Python datetime

日付と時刻の処理に関する試験対策の内容を解説します。主に標準ライブラリの datetime モジュール、time モジュール、calendar モジュールについて説明します。

セクション1: datetime モジュール

datetime モジュールは、日付と時刻を操作するための強力なツールを提供します。これには、日付や時刻の計算、フォーマット、解析などが含まれます。

1.1 基本的なクラス

datetime.date: 年、月、日を扱います。
datetime.time: 時、分、秒、マイクロ秒を扱います。
datetime.datetime: 年、月、日、時、分、秒、マイクロ秒を扱います。
datetime.timedelta: 時間の差を表します。

例:日付の操作

from datetime import date

# 現在の日付
today = date.today()
print(today)  # 例: 2023-06-08

# 特定の日付を作成
d = date(2023, 12, 25)
print(d)  # 2023-12-25

# 日付の差
delta = d - today
print(delta.days)  # 日数を表示

例:時刻の操作

from datetime import time

# 特定の時刻を作成
t = time(14, 30, 0)
print(t)  # 14:30:00

例:日時の操作

from datetime import datetime

# 現在の日時
now = datetime.now()
print(now)  # 例: 2023-06-08 14:30:00.123456

# 特定の日時を作成
dt = datetime(2023, 12, 25, 17, 30)
print(dt)  # 2023-12-25 17:30:00

例:時間の差

from datetime import timedelta

# 1週間後
next_week = now + timedelta(weeks=1)
print(next_week)  # 1週間後の日付

# 1時間前
one_hour_ago = now - timedelta(hours=1)
print(one_hour_ago)  # 1時間前の日時

1.2 日時のフォーマットと解析

例:日時のフォーマット

now = datetime.now()

# 日時を文字列にフォーマット
formatted_date = now.strftime('%Y-%m-%d %H:%M:%S')
print(formatted_date)  # 例: 2023-06-08 14:30:00

例:文字列から日時を解析

date_string = '2023-12-25 17:30:00'
parsed_date = datetime.strptime(date_string, '%Y-%m-%d %H:%M:%S')
print(parsed_date)  # 2023-12-25 17:30:00

time モジュール

time モジュールは、時間の計測や処理を行うための関数を提供します。

2.1 現在の時刻の取得

import time

# 現在の時刻を取得
current_time = time.time()
print(current_time)  # Unixタイムスタンプ

2.2 スリープ

# 2秒間スリープ
time.sleep(2)
print("2秒後に実行されました")

2.3 時刻のフォーマット

例:ローカル時刻の取得とフォーマット

local_time = time.localtime()
formatted_local_time = time.strftime('%Y-%m-%d %H:%M:%S', local_time)
print(formatted_local_time)  # 例: 2023-06-08 14:30:00

例:文字列から時刻を解析

time_string = '2023-12-25 17:30:00'
parsed_time = time.strptime(time_string, '%Y-%m-%d %H:%M:%S')
print(parsed_time)  # time.struct_time(tm_year=2023, tm_mon=12, tm_mday=25, tm_hour=17, tm_min=30, tm_sec=0, tm_wday=0, tm_yday=359, tm_isdst=-1)

calendar モジュール

calendar モジュールは、カレンダーに関する操作をサポートします。特定の月や年のカレンダーを生成したり、曜日を計算したりできます。

3.1 月カレンダーの生成

import calendar

# 2023年6月のカレンダーを表示
print(calendar.month(2023, 6))

3.2 年カレンダーの生成

# 2023年のカレンダーを表示
print(calendar.calendar(2023))

3.3 曜日の計算

# 2023年12月25日の曜日を計算(0=月曜日, 6=日曜日)
weekday = calendar.weekday(2023, 12, 25)
print(weekday)  # 0(つまり月曜日)

3.4 うるう年の判定

# 2024年はうるう年かどうかを判定
is_leap = calendar.isleap(2024)
print(is_leap)  # True

まとめ

ここまでで、日付と時刻の処理に関する基本的な内容を解説しました。datetime モジュール、time モジュール、calendar モジュールを使うことで、さまざまな日付と時刻に関する操作が可能です。

zoneinfo モジュールは、Python 3.9で導入されたタイムゾーンの情報を扱うためのモジュールです。

セクション4: zoneinfo モジュール

zoneinfo モジュールは、IANAタイムゾーンデータベースを使用してタイムゾーン情報を提供します。これにより、特定の地域のローカル時間を簡単に操作できます。

4.1 基本的な使い方

zoneinfo モジュールを使用して、特定のタイムゾーンの情報を取得し、そのタイムゾーンに基づいた日時を操作することができます。

例:タイムゾーンの取得と現在時刻の表示

from zoneinfo import ZoneInfo
from datetime import datetime

# タイムゾーンの取得
tokyo_tz = ZoneInfo('Asia/Tokyo')
utc_tz = ZoneInfo('UTC')

# 現在のUTC時刻
now_utc = datetime.now(utc_tz)
print(f"現在のUTC時刻: {now_utc}")

# 東京の現在時刻
now_tokyo = datetime.now(tokyo_tz)
print(f"東京の現在時刻: {now_tokyo}")

4.2 タイムゾーンの変換

特定のタイムゾーン間で時刻を変換することができます。

例:UTCから他のタイムゾーンへの変換

from zoneinfo import ZoneInfo
from datetime import datetime

# UTCタイムゾーンの現在時刻
now_utc = datetime.now(ZoneInfo('UTC'))
print(f"現在のUTC時刻: {now_utc}")

# UTC時刻をニューヨーク時間に変換
new_york_tz = ZoneInfo('America/New_York')
now_new_york = now_utc.astimezone(new_york_tz)
print(f"ニューヨークの現在時刻: {now_new_york}")

# UTC時刻を東京時間に変換
tokyo_tz = ZoneInfo('Asia/Tokyo')
now_tokyo = now_utc.astimezone(tokyo_tz)
print(f"東京の現在時刻: {now_tokyo}")

4.3 タイムゾーン付き日時の操作

zoneinfo を使用して、タイムゾーン付きの日時を操作できます。

例:タイムゾーン付き日時の比較

from zoneinfo import ZoneInfo
from datetime import datetime

# 東京の特定の日時
dt_tokyo = datetime(2023, 12, 25, 10, 0, tzinfo=ZoneInfo('Asia/Tokyo'))
print(f"東京の日時: {dt_tokyo}")

# ニューヨークの同じ瞬間の時刻
dt_new_york = dt_tokyo.astimezone(ZoneInfo('America/New_York'))
print(f"ニューヨークの同じ瞬間の時刻: {dt_new_york}")

# 比較
if dt_tokyo > dt_new_york:
    print("東京の日時の方が後です")
else:
    print("ニューヨークの日時の方が後です")

4.4 タイムゾーン情報の一覧

利用可能なタイムゾーンの一覧を表示することができます。以下の例では、zoneinfo モジュールのタイムゾーンデータベースの一部を表示します。

例:タイムゾーンの一覧の表示

import zoneinfo

# 利用可能なタイムゾーンの一部を表示
available_timezones = zoneinfo.available_timezones()
print(sorted(available_timezones)[:10])  # 最初の10個を表示

まとめ

zoneinfo モジュールを使うことで、タイムゾーンを考慮した日時の操作が容易になります。このモジュールは、国際化対応のアプリケーションや異なるタイムゾーン間でのデータの同期に非常に役立ちます。

この記事が気に入ったらサポートをしてみませんか?