前回教えてくれた「time」で最後に言ってた「日付」を使う別の標準ライブラリってどんなやつなの??
日時を使う場合の標準ライブラリは「datetime」ってやつだよ
日時の表現や計算が簡単にできて、うるう年や時差のような特殊な処理も対応してくれる便利なライブラリになるよ!
うるう年とかを考慮してくれるのは良いね!!
「datetime」では、取得した情報が「datetime型」っていうデータ型になるのがポイントで、直感的に扱いやすいのもポイントだね!
ほうほう!パッと見で日時が分かるね!
「datetime」では、取得した情報が「datetime型」っていうデータ型になるのがポイントで、直感的に扱いやすいのもポイントだね
この状態から自分が希望する形で日時を表示する場合は「.strftime()」を使うと良いよ!
文字列はいつも通りで、「%」の付く部分が対応する日時の情報になるんだね
でも、どれがどの情報になってるのか覚えられるかな...
ちなみに、それぞれの情報はこんな感じで対応してるよ!
なにか気づくことがないかな??
| 書式 | 意味 | 例 |
|---|---|---|
%Y | 4桁の西暦 | 2025 |
%y | 2桁の西暦 | 25 |
%m | 2桁の月(01〜12) | 03 |
%d | 2桁の日(01〜31) | 06 |
%H | 2桁の時(00〜23) | 14 |
%M | 2桁の分(00〜59) | 45 |
%S | 2桁の秒(00〜59) | 30 |
%a | 曜日の省略名(英語) | Thu |
%A | 曜日の正式名(英語) | Thursday |
%w | 曜日を数字で(0=日曜) | 4 |
...あっ!英語にした時の頭文字か!
そうゆうこと!ちなみに曜日の省略名が「a」なのは、「省略された」が「abbreviated」だからだよ
次に、文字列での利用ではなくて値として取得したい場合は表の通りになるよ
ちなみに、表内の「dt」はdatetime型の値が入ってる変数だよ
| 機能 | 説明 | 使用場面 | 例 | 結果 |
|---|---|---|---|---|
| dt.year, dt.month, dt.day | 年・月・日だけを取得 | 個別に情報を使いたいとき | dt.year | 2025 |
| dt.hour, dt.minute, dt.second | 時・分・秒だけを取得 | 時間の細かい制御が必要なとき | dt.minute | 45 |
| dt.microsecond | マイクロ秒を取得 | 高精度な時間管理 | dt.microsecond | 123456 |
| dt.weekday() | 曜日を0〜6(=月〜日)で取得 | 曜日ごとの処理を行いたいとき | dt.weekday() | 3(木曜) |
| dt.isoweekday() | 曜日を1〜7(=月〜日)で取得 | ISO基準の曜日が必要なとき | dt.isoweekday() | 4(木曜) |
日時に関係する英単語を「.」の後にそのまんま付ける感じなんだね
そうだね!
ただ、曜日以外は「()」が付かない点に注意してね
ホントだ...!気を付ける!!
「datetime」はさっきのプログラムのような特定の日時を指定してdatetime型にする「datetime()」「.date()」「.time()」とかがあるけど、完全に覚えるのは大変だから「確かこんなことができたな」くらいで覚えておけば十分だよ
| 機能 | 説明 | 使用場面 | 例 |
|---|---|---|---|
| datetime.now() | 現在の日時を取得 | 現在の時間を知りたいとき | datetime.now() |
| datetime.today() | 今日の日付を取得(now()とほぼ同じ) | 簡易に今日を知りたいとき | datetime.today() |
| datetime.utcnow() | UTC現在時刻を取得 | 時差のない時間を使いたいとき | datetime.utcnow() |
| datetime.fromtimestamp() | UNIXタイムスタンプから変換 | 数値で保存された時間の変換 | datetime.fromtimestamp(1670000000) |
| datetime.timestamp() | datetimeをUNIXタイムスタンプに | 数値で記録・送信したいとき | dt.timestamp() |
| datetime.strptime(文字列, 書式) | 文字列を日時に変換 | ユーザー入力やファイルの日付を扱う | datetime.strptime("2025-03-06", "%Y-%m-%d") |
| datetime.strftime(書式) | 日時を文字列に変換 | 表示形式を自由に整えたいとき | now.strftime("%Y/%m/%d") |
| datetime.date() | 特定の日付を作成 | 固定の日付を作りたいとき | datetime.date(2025, 3, 6) |
| datetime.time() | 特定の時刻を作成 | 固定の時刻を扱いたいとき | datetime.time(14, 30) |
| datetime() | 特定の日付と時刻をまとめて作成 | 日時を自分で指定したいとき | datetime(2025, 3, 6, 14, 30) |
| datetime.combine(date, time) | 日付と時間を合体 | 日時の詳細指定が必要なとき | datetime.combine(d, t) |
めっちゃいっぱい...!
ところで、「今日から15日後は何月何日か」みたいな計算をする方法はあるの?
もちろん出来るよ!
日時の計算の時は「timedelta」を使うと良いよ!
なるほどね!
ちなみに、datetime型の値同士を引き算すると「timedelta」の形になってくれるよ
おお!そしたら、「締切日まであと何日!」みたいなのも簡単に出来るんだね!!
そゆこと!
