[Python]Pythonでの日付オブジェクトの操作

日付の処理に関してまとめる。

awareとnaive

pythonでは同じdatetimeオブジェクトでもawareなオブジェクトとnaiveなオブジェクトの2種類が存在する。

  • aware:タイムゾーン情報を持つdatetimeオブジェクト(オブジェクト生成時にどのタイムゾーンの時刻であるかを指定する必要がある)
  • naive:タイムゾーン情報を持たないdatetimeオブジェクト

例えば現在時刻を求めるにはそれぞれ下記のように行う。

from datetime import datetime
import pytz

aware = datetime.now(pytz.utc)
# => 2019-12-18 13:10:11.128125+00:00
naive = datetime.now()
# => 2019-12-18 22:10:11.128095

それぞれが別のオブジェクトであるため日時を比較することはできない。
※変数naiveに値を代入する際に実行されるnow()はシステム時刻を参照して現在時刻を求めている。

利用可能な日付関連オブジェクト

datetimeモジュールで利用できるオブジェクトは下記のものがある。(公式ドキュメントより抜粋)

object
  timedelta
  tzinfo
   timezone
  time
  date
   datetime

dateは常にnaive
timedatetimeawarenaiveのどちらかになる。

以降は自分の中でよく使う日付表現を中心に記載する。

現在時刻の取得

import datetime

now = datetime.now()

前日/翌日の日付を取得

ある時点からの経過時間を求めるにはtimedeltaオブジェクトを使用する

from datetime import datetime,timedelta

yesterday = (datetime.now() - timedelta(days=1))
tomorrow = (datetime.now() + timedelta(days=1))

先月/翌月

timedeltaオブジェクトだけで表現できないので、dateutilライブラリのrelativedeltaモジュールを使用する。

from datetime import datetime,timedelta
from dateutil.relativedelta import relativedelta

month_before = (datetime.now() - relativedelta(months=1))
month_after = (datetime.now() + relativedelta(months=1))

文字列への変換

日付オブジェクトから文字列を取得するにはstrftime()を使用する。
日付の形式は公式マニュアルを参照。

from datetime import datetime

now = datetime.now().strftime("%Y/%m/%d %H:%M:%S")
# => 2019/12/18 10:43:06

参考

Pythonで翌日や翌月みたいな日付の計算をする

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

9 + 5 =

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください