pythonの日付に関連する処理についての備忘録です。
※随時更新
- 日付関数は、datetimeをimportします。
import datetime
import calendar
#1. 現在日付、現在日時
##(1).現在日付を取得する。
dt1 = datetime.date.today()
##(2).現在日時を取得する。
dt2 = datetime.datetime.now()
#2. 日付、日時の生成
##(3).年月日から、日付を生成する。
y=2019
m=6
d=9
dt3 = datetime.date(y, m, d)
##(4).年月日時分から、日付を生成する。
dt4 = datetime.datetime(year=2019, month=12, day=30, hour=14, minute=0, second=29)
#3. 日時のプロパティ
##(5).datetimeの値を取り出す。
current_datetime = datetime.datetime.now()
print("(5).datetimeの値を取り出す。 year=%s month=%s day=%s week()=%s" %
(current_datetime.year,
current_datetime.month,
current_datetime.day,
current_datetime.weekday(),
)
)
#4. 日時<->文字列の相互変換
##(6).datetimeを文字列に変換する
dt6= datetime.datetime.now()
strdt6 = dt6.strftime('%Y-%m-%d %H:%M:%S')
##(7).dateを文字列に変換する
dt= datetime.date.today()
strdt = dt.strftime('%Y-%m-%d')
##(8).文字列(日付)をdateオブジェクトに変換する。
tstr = '2012-12-29'
tdate = datetime.datetime.strptime(tstr, '%Y-%m-%d')
odate = datetime.date(tdate.year, tdate.month, tdate.day)
##(9).文字列(日時)をdatetimeオブジェクトに変換する。
tstrdt = '2017-12-01 23:06:19'
tdatetime = datetime.datetime.strptime(tstrdt, '%Y-%m-%d %H:%M:%S')
#5. 月初、月末の取得
##(10).月初を取得する。
"""
月初を取得する
"""
def get_firstdate(y, m):
return datetime.date(y, m, 1)
fdate = get_firstdate(2019, 6)
##(11).月末を取得する
"""
月末を取得する
"""
def get_lastdate(y, m):
_, days = calendar.monthrange(y, m)
firstdate = get_firstdate(y, m)
lastdate = firstdate + datetime.timedelta(days=days - 1)
return lastdate
ldate = get_lastdate(2019, 6)
#6. 月初日時点の週の日曜日、月末日時点の週の土曜日(カレンダー用)
##(12).月初の週始まり(日曜日)を取得する
"""
月初の週始まり(日曜日)を取得する
"""
def get_first_sunday(y, m):
firstdate = get_firstdate(y, m)
from_date = firstdate - datetime.timedelta(days=firstdate.weekday()+1)
return from_date
fsunday = get_first_sunday(2019, 6)
##(13).月末の週終わり(土曜日)を取得する
"""
月末の週終わり(土曜日)を取得する
"""
def get_last_saturday(y, m):
lastdate = get_lastdate(y, m)
to_date = lastdate + datetime.timedelta(days=lastdate.weekday())
return to_date
fsaturday = get_last_saturday(2019, 6)
#7. 24H以上の時間の取り扱い
##(14).24H以上の時刻をdatetimeに変換する
datetime.datetimeのhourに 24以上の数値を渡すとエラーになります。
ValueError: hour must be in 0..23
このケースでは、timedeltaを使って分数を計算をして、日付に加算することで対応します。
"""
24H以上の時刻をdatetimeに変換する
"""
def over24Hdatetime(year, month, day, hour, minute):
#to minute
minutes = int(hour)*60 + int(minute)
dt = datetime.datetime(year=year, month=month, day=day)
dt += datetime.timedelta(minutes=minutes)
return dt
dt14 = over24Hdatetime(2019, 6, 9, 49, 19)
#8. 日付の減算
##(15).時刻同士の引き算(分数に換算する。)
"""
時刻同士の引き算(分数に換算する。)
"""
def get_minutes(fromdt, todt):
#2つのdatetimeの差は、timedeltaオブジェクト
#timedelta には、days, seconds, microsecondsの3つのプロパティがある。
return (todt - fromdt).seconds / 60
fromdt = datetime.datetime.strptime('2019-06-09 09:00', '%Y-%m-%d %H:%M')
todt = datetime.datetime.strptime('2019-06-09 17:30', '%Y-%m-%d %H:%M')
minutes = get_minutes(fromdt, todt)