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クラスをインポートする必要があります。

 

構文

 

Python
 
from datetime import datetime
datetime.now(tz=None)

 

引数

 

  • tz (オプション): タイムゾーンオブジェクトを指定します。この引数を省略するかNoneにすると、システムのローカルタイムゾーンの日時が返されます。タイムゾーンについては後述します。

 

戻り値

 

現在の日時を表す**datetimeオブジェクト**。

 

具体例

 

Python
 
from datetime import datetime

# 現在のローカル日時を取得
current_local_time = datetime.now()
print(f"現在のローカル日時: {current_local_time}")
# 出力例: 現在のローカル日時: 2025-07-30 15:42:37.123456 (実行環境によって異なる)

 

取得したdatetimeオブジェクトから情報を取り出す

 

取得したdatetimeオブジェクトからは、年、月、日、時、分、秒などの個々の情報にアクセスできます。

Python
 
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(素朴な)」と呼ばれます。これは、そのオブジェクトがどの特定のタイムゾーンに属しているかの情報を持たないことを意味します。

Python
 
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でインストールしてください。

Python
 
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
 
# 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)を使用することが推奨されます。

Python
 
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.utcdatetimeモジュール内の定数で、UTCタイムゾーンを表すtzinfoオブジェクトです。


 

datetime.now()と他の日時取得方法との比較

 

 

time.time()との違い

 

  • datetime.now(): 人間が読みやすい日付と時刻の形式で、現在の日時をdatetimeオブジェクトとして返します。

  • time.time(): エポックからの秒数(通常は1970年1月1日0時0分0秒UTCからの経過秒数)を浮動小数点数で返します。時間計測やユニークなID生成などによく使われます。

Python
 
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オブジェクトを扱うには、pytzzoneinfoを使うのが推奨される。

  • datetime.utcnow()は非推奨であり、代わりに**datetime.now(timezone.utc)**を使用する。

  • 時間計測などにはtime.time()も考慮する。

datetime.now()とタイムゾーンの扱いをマスターすることで、Pythonでの日時操作がより堅牢で信頼性の高いものになるでしょう。ぜひ今日学んだことを、あなたのコーディングに活かしてみてくださいね!


 

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座