Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

pythonのdatetimeについて

More than 1 year has passed since last update.

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)
t-iguchi
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away