Pythonで現在時刻を取得! datetime.now()徹底解説とタイムゾーンの扱い方
Pythonでプログラミングをしていると、「今の日時が知りたい!」「この処理が何時に始まったか記録したい!」といった場面は頻繁に訪れますよね。そんな時に使うのが、日時操作の強力なモジュールであるdatetime
から提供される**datetime.now()
**です。
この記事では、datetime.now()
の基本的な使い方から、タイムゾーンの扱い方、そして知っておくと便利な関連知識まで、初心者の方にも分かりやすく徹底的に解説します。datetime.now()
をマスターすれば、あなたのPythonコードでの日時管理が格段にスムーズになりますよ!
datetime.now()
とは? なぜ使うのか?
datetime.now()
は、Pythonの標準ライブラリである**datetime
モジュール**に属する関数で、現在のローカル日時(日付と時刻)を取得するために使用します。
なぜdatetime.now()
を使うのでしょうか?
現在の時刻の記録: プログラムの開始時刻や特定処理の実行時刻をタイムスタンプとして記録したい場合に便利です。
ファイル名やログの生成: 現在の日時を元に、ユニークなファイル名やログエントリを生成する際によく使われます。
時間ベースの条件分岐: 特定の時間が経過したかどうかを判断するなどの、時間に基づく条件分岐に利用できます。
datetime.now()
の基本的な使い方
datetime.now()
を使用するには、まずdatetime
モジュールからdatetime
クラスをインポートする必要があります。
構文
from datetime import datetime
datetime.now(tz=None)
引数
tz
(オプション): タイムゾーンオブジェクトを指定します。この引数を省略するかNone
にすると、システムのローカルタイムゾーンの日時が返されます。タイムゾーンについては後述します。
戻り値
現在の日時を表す**datetime
オブジェクト**。
具体例
from datetime import datetime
# 現在のローカル日時を取得
current_local_time = datetime.now()
print(f"現在のローカル日時: {current_local_time}")
# 出力例: 現在のローカル日時: 2025-07-30 15:42:37.123456 (実行環境によって異なる)
取得したdatetime
オブジェクトから情報を取り出す
取得したdatetime
オブジェクトからは、年、月、日、時、分、秒などの個々の情報にアクセスできます。
from datetime import datetime
now = datetime.now()
print(f"年: {now.year}")
print(f"月: {now.month}")
print(f"日: {now.day}")
print(f"時: {now.hour}")
print(f"分: {now.minute}")
print(f"秒: {now.second}")
print(f"マイクロ秒: {now.microsecond}")
datetime.now()
とタイムゾーン(重要!)
datetime.now()
はデフォルトでシステムのローカルタイムゾーンの日時を返します。これは多くの場合便利ですが、異なるタイムゾーンのユーザーを扱うアプリケーションや、サーバーがどのタイムゾーンに設定されているか不明な場合は注意が必要です。
タイムゾーンを意識しない(naive)なdatetime
オブジェクト
tz
引数を指定せずにdatetime.now()
で取得したdatetime
オブジェクトは、「naive(素朴な)」と呼ばれます。これは、そのオブジェクトがどの特定のタイムゾーンに属しているかの情報を持たないことを意味します。
from datetime import datetime
dt = datetime.now()
print(f"naiveなdatetimeオブジェクト: {dt}")
print(f"タイムゾーン情報: {dt.tzinfo}") # 出力: None
タイムゾーンを意識する(aware)なdatetime
オブジェクト
国際的なアプリケーションや、タイムゾーンのずれによる問題を避けたい場合は、タイムゾーン情報を持った「aware(意識的な)」なdatetime
オブジェクトを使うべきです。これには通常、pytz
ライブラリ(外部ライブラリ)やPython 3.9以降のzoneinfo
モジュール(標準ライブラリ)を使用します。
pytz
を使った例 (Python 3.9未満でも利用可能)
pytz
をインストールしていない場合は、pip install pytz
でインストールしてください。
from datetime import datetime
import pytz
# タイムゾーンオブジェクトを取得
tokyo_tz = pytz.timezone('Asia/Tokyo')
utc_tz = pytz.timezone('UTC')
# タイムゾーンを指定して現在日時を取得
now_tokyo = datetime.now(tokyo_tz)
now_utc = datetime.now(utc_tz)
print(f"東京の現在日時 (aware): {now_tokyo}")
print(f"UTCの現在日時 (aware): {now_utc}")
# 出力例 (東京がJST+9の場合):
# 東京の現在日時 (aware): 2025-07-30 15:42:37.123456+09:00
# UTCの現在日時 (aware): 2025-07-30 06:42:37.123456+00:00
zoneinfo
を使った例 (Python 3.9以降)
zoneinfo
はPython 3.9から標準ライブラリとして導入されました。
# Python 3.9以降でのみ動作
from datetime import datetime
from zoneinfo import ZoneInfo
# タイムゾーンオブジェクトを取得
tokyo_tz = ZoneInfo('Asia/Tokyo')
utc_tz = ZoneInfo('UTC')
# タイムゾーンを指定して現在日時を取得
now_tokyo = datetime.now(tokyo_tz)
now_utc = datetime.now(utc_tz)
print(f"東京の現在日時 (aware): {now_tokyo}")
print(f"UTCの現在日時 (aware): {now_utc}")
UTC時刻の取得 (datetime.utcnow()
は非推奨)
過去にはdatetime.utcnow()
という関数でUTC時刻を取得できましたが、これは非推奨になりました。代わりに、datetime.now(timezone.utc)
を使用することが推奨されます。
from datetime import datetime, timezone
# 非推奨: datetime.utcnow()
# print(datetime.utcnow())
# 推奨: タイムゾーンを明示的に指定してUTC時刻を取得
current_utc_time = datetime.now(timezone.utc)
print(f"現在のUTC日時 (aware): {current_utc_time}")
# 出力例: 現在のUTC日時 (aware): 2025-07-30 06:42:37.123456+00:00
timezone.utc
はdatetime
モジュール内の定数で、UTCタイムゾーンを表すtzinfo
オブジェクトです。
datetime.now()
と他の日時取得方法との比較
time.time()
との違い
datetime.now()
: 人間が読みやすい日付と時刻の形式で、現在の日時をdatetime
オブジェクトとして返します。time.time()
: エポックからの秒数(通常は1970年1月1日0時0分0秒UTCからの経過秒数)を浮動小数点数で返します。時間計測やユニークなID生成などによく使われます。
import time
from datetime import datetime
print(f"datetime.now(): {datetime.now()}")
print(f"time.time(): {time.time()}")
# 出力例:
# datetime.now(): 2025-07-30 15:42:37.123456
# time.time(): 1722350557.123456
まとめ
datetime.now()
は、Pythonで現在のローカル日時を取得するための基本的な関数です。しかし、その背後にあるタイムゾーンの概念を理解することが、正確な日時処理には不可欠です。
datetime.now()
はデフォルトでシステムのローカル日時を返す。tz
引数なしで取得したdatetime
オブジェクトは**naive(素朴な)**である。タイムゾーンを意識する(awareな)
datetime
オブジェクトを扱うには、pytz
やzoneinfo
を使うのが推奨される。datetime.utcnow()
は非推奨であり、代わりに**datetime.now(timezone.utc)
**を使用する。時間計測などには
time.time()
も考慮する。
datetime.now()
とタイムゾーンの扱いをマスターすることで、Pythonでの日時操作がより堅牢で信頼性の高いものになるでしょう。ぜひ今日学んだことを、あなたのコーディングに活かしてみてくださいね!
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座