LoginSignup
21
36

More than 5 years have passed since last update.

pythonのdatetimeについて

Last updated at Posted at 2019-06-09

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)
21
36
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
36