のんびりSEの議事録

プログラミング系のポストからアプリに関してのポストなどをしていきます。まれにアニメ・マンガなど

pythonで日付操作あれこれ

最近Pythonをよく使用するのですが、言語によっては日付操作は非常に面倒(特にJSとかは…)なことがあり、Pythonではどうするのか、いろいろ調べてみました。

標準で利用可能なモジュール

  • time : 時刻に関する関数を提供
  • datetime : 日付や時間データの操作する関数を提供
  • calendar : カレンダーに関する関数を提供
  • locale : ロケール関連
import time
from datetime import datetime

# 本日の時刻
now = datetime.today()
# datetime.datetime(2017, 5, 21, 12, 42, 28, 403222)
now = datetime.now()
# datetime.datetime(2017, 5, 21, 12, 42, 41, 546079)
# 年
print(now.year)
# 月
print(now.month)
# 日
print(now.day)
# 曜日(0: 月曜 ~ 6:日曜)
print(now.weekday())
# 時
print(now.hour)
# 分
print(now.minute)
# 秒
print(now.second)

日時の計算

指定できるパラメータは、days,seconds, microseconds,milliseconds, minutes, hours,weeksで この関数の返り値とdatetimeオブジェクトを計算できる

from datetime import datetime, timedelta

now = datetime.now()
# 1日後
print(now + timedelta(days=1))
# 1日前
print(now - timedelta(days=1))
# 1週間後
print(now + timedelta(weeks=1))
# 1週間前
print(now - timedelta(weeks=1))

カレンダー

import calendar

# カレンダーを出力する
>>> calendar.prmonth(2017, 5)
      May 2017
Mo Tu We Th Fr Sa Su
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

日付拡張ライブラリ

datetimeを拡張したライブラリ

インストー

pip install python-dateutil
from datetime import datetime
from dateutil import relativedelta


now = datetime.now()

# 1週間前
print(now - relativedelta.relativedelta(weeks=1))
# 今週頭
print(now - relativedelta.relativedelta(days=now.weekday(), hour=0, minute=0, second=0))
# 今週末
date = datetime(2017, 5, 19)
print(date + relativedelta.relativedelta(weekday=6))
# 先週の月曜の0時
print(now - relativedelta.relativedelta(weeks=1, days=now.weekday(), hour=0, minute=0, second=0)) 
# 月初
print(now + relativedelta.relativedelta(day=1, hour=0, minute=0, second=0))
# 月末
print(now + relativedelta.relativedelta(day=1, months=1, days=-1, hour=23, minute=59, second=59))

参考