見出し画像

Python: now()とtoday()の謎

ふと、「pd.Timestamp.today() と pd.Timestamp.now()って出力結果は同じだけど違いはなんだっけ?」と疑問に思ったので、改めて調べてみました。以下はVisual Studio Codeで実行したコードです。

import pandas as pd

print(pd.Timestamp.now())
print(pd.Timestamp.today())

出力結果

タイムゾーンを指定して比較してみる

調べていると、タイムゾーンを指定できるか否かの違いがある、という記事を見つけました。さっそく確認してみます。

import pandas as pd

print(pd.Timestamp.now(tz='Asia/Tokyo'))
print(pd.Timestamp.today(tz='Asia/Tokyo'))

出力結果

結果は同じ……どうやら、どちらもタイムゾーン指定ができるようです。ではnow() と today() が両方存在している意味とは?

なかなか解明できず…

ChatGPTを使って得た情報をまとめてみる

pd.Timestamp.now()

  • 「現在の日時(年月日+時刻)」を取得する関数

  • もともと詳細な日時データ(年月日+時刻)を取得するために作られた

  • オプションでタイムゾーン (tz) を指定できる

pd.Timestamp.today()

  • 「現在の日付(年月日)」を取得するために主に作られた

  • Pandas 1.5.0 より前のバージョンではタイムゾーン指定 (tz) ができなかった

  • バージョン1.5.0以降、tz オプションが追加され、today() でもタイムゾーンを指定できるようになった

使い分けと互換性について

過去のバージョン(pandas バージョン 1.5.0 より前)では pd.Timestamp.today() にタイムゾーンを指定する引数がなかったため、日時と時刻の両方を含むタイムゾーン付きデータが必要な場合には pd.Timestamp.now() の使用が推奨されていました。しかし、pd.Timestamp.today() でもタイムゾーンが指定できるようになり、現在では互換性を保つためにどちらも存在しています。

一般的には、日付のみを取得したい場合は today()時刻情報を含むタイムスタンプが必要な場合は now() を使うのが良いそうです。

ひとまずモヤモヤは解消できました。時間周りのテーマが続いておりますが、しばらく集中的に理解を深めることにします!

いいなと思ったら応援しよう!