Pythonで現在の日付・時刻を取得する方法(datetime.now() / today())
生徒
「いまの日時をPythonで取得して表示したいです。どんな方法がありますか?タイムゾーンとか難しそうで不安です。」
先生
「心配いりません。Pythonの標準にはdatetimeという便利な道具があり、まずは国内で普通に使う『今の時刻』を取る方法から学びましょう。タイムゾーンは後で必要になったときに一歩ずつ学べば大丈夫です。」
生徒
「具体的にはどう書くんですか?コードはすぐに試せますか?」
先生
「もちろんです。今回はdatetime.now()とdate.today()の二つを中心に、初心者にも分かるように丁寧に説明します。」
1. datetimeモジュールとは?初心者向けのイメージ
datetimeはPythonに最初から入っている「日付と時刻」を扱うための道具箱です。電卓やノートのように特別な準備は不要で、すぐに使えます。
日付や時刻を扱うときは、「いつ実行したか」「何日後か」「何時間前か」などを正確に扱えるように、この道具を使います。
一般的に日付は年・月・日で表し、時刻は時・分・秒で表します。datetimeを使うとこれらを組み合わせて一つの「日時オブジェクト」として扱えます。
2. 準備:モジュールの読み込み
いきなり難しい設定は不要です。from datetime import datetime, dateと書くだけで、すぐに使えます。
importは、工具箱から必要な工具を取り出す作業だと考えてください。
from datetime import datetime, date
3. 現在の日時を取得する:datetime.now()
datetime.now()は「今の瞬間」を丸ごと返します。年、月、日、時、分、秒、さらにはマイクロ秒まで含まれるため、細かい時間計測にも使えます。
例えば、処理にかかった時間をログに残したり、ユーザーの操作があった時刻を記録したりするときに便利です。
from datetime import datetime
now = datetime.now()
print(now)
表示はYYYY-MM-DD HH:MM:SS.microの形式になります。人が読みやすい形に整形するには後述のstrftimeを使います。
4. 現在の日付だけを取得する:date.today()
日付だけでよい場合はdate.today()がシンプルで分かりやすいです。
たとえば「今日の日付を表示する」や「日付だけでファイルを分ける」など、時間の情報が不要な処理に向いています。
from datetime import date
today = date.today()
print(today)
出力はYYYY-MM-DDのようになります。
5. now()とtoday()の具体的な使い分け
実務では次のように使い分けます。例えばログファイルに残すなら時刻まで必要なのでnow()、日次の処理やカレンダー表示ならtoday()で十分です。
コードの可読性を高めるために「日付だけ必要なのか」「時刻も必要か」を明確にして使うと良いでしょう。
具体例として、毎朝実行する処理の判定はtoday()で十分ですが、ユーザーがボタンを押した時刻を正確に記録するならnow()が必要です。
6. 表示形式を整える:strftimeの例と注意点
strftimeを使えば日時の見た目を自由に変更できます。%Yが年、%mが月、%dが日を表します。日本語の単位を入れて表示することもできます。
from datetime import datetime
now = datetime.now()
print(now.strftime("%Y年%m月%d日 %H時%M分%S秒"))
注意点としては、フォーマット指定子を間違えると期待した結果が得られないことです。英語表記やゼロ埋めの有無などを確認しましょう。
7. 文字列から日時に変換する:strptimeの利用
外部から渡された日付文字列をdatetimeオブジェクトに変換するにはstrptimeを使います。これは「文字列を読み取って日時に直す」作業です。
from datetime import datetime
s = "2025-12-09 14:30:00"
dt = datetime.strptime(s, "%Y-%m-%d %H:%M:%S")
print(dt)
この変換ができれば、文字列として受け取った日付を計算に使ったり比較したりできます。
8. 実践例:処理時間の計測やファイル名への活用
処理の開始と終了の日時を取って差を計算することで、処理時間を把握できます。これはプログラムの性能改善につながります。
from datetime import datetime
start = datetime.now()
# 処理を実行(ここでは待機の例)
end = datetime.now()
elapsed = end - start
print("処理時間:", elapsed)
ファイル名に日時を含めることで、ファイルの作成日時が分かりやすくなります。ハイフンやコロンを避けた形式にするとファイル名として扱いやすいです。
9. タイムゾーンの基本的な注意点と実用的な対処法
デフォルトではnow()はコンピュータの設定したローカル時間を返します。サーバーとローカルの時間がずれていることがあるため、複数サーバーで動く処理や国際サービスでは注意が必要です。
対処法としては、UTC(協定世界時)で統一して扱う方法があります。Pythonではdatetime.utcnow()やタイムゾーンを扱うライブラリを使ってUTC基準で処理し、表示時に現地時間に変換するのが一般的です。
10. フォーマット指定子の一覧(よく使うもの)
日時の表示でよく使うフォーマットを覚えておくと便利です。代表的なものをいくつか紹介します。
%Y:西暦の年(例:2025)%m:月(01から12)%d:日(01から31)%H:24時間制の時(00から23)%M:分(00から59)%S:秒(00から59)
これらを組み合わせることで、人が読みやすい表示やファイル名に適した表示を作れます。
11. timeモジュールとの違い
timeモジュールも時間を扱いますが、主に秒単位の計測や寝かせる(待機する)用途に適しています。日時の取り扱いや表示の自由度はdatetimeの方が高いです。
初心者はまずdatetimeを覚えるとよいでしょう。
12. よくある間違いと対処法
初めて使うときに多い間違いは、フォーマットが合っていない文字列をstrptimeに渡してエラーになることです。例外処理でエラーを捕まえてエラーメッセージを見れば原因が分かります。
もう一つはタイムゾーンを無視して比較してしまうことです。ローカル時間とUTCを混在させないように注意しましょう。
13. 練習問題(手を動かして学ぶ)
次の練習をやってみてください。答えは自分でコードを実行して確認しましょう。
- 現在の日時を取得して、日本語フォーマットで表示する。
- 文字列で与えられた日時をdatetimeに変換し、1時間後の時刻を表示する。
- today()を使って「今日が祝日かどうか」を判定する簡単な処理を作る(祝日リストを用意して判定)。
14. 最後に
最初はdatetime.now()で慣れてから、用途に合わせてdate.today()やstrftime、strptimeを使い分けると実務で役立ちます。
何度も手を動かして出力を確認しながら学ぶのがおすすめです。