非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Python: 日付の操作

   

Pyhonの日付操作方法です。現在日時の取得から、年月日、時間それぞれの値を取得、加算・減算、月初・月末の取得について書き留めておきます。

現在日時の取得

Pythonで日付操作する場合はdatetime.datetimeオブジェクトをインポートします。文字列にする場合はstrftimeを使います。

from datetime import datetime

dt = datetime.now()
print(dt.strftime('%Y/%m/%d %H:%M:%S'))
 

 

広告

年月日、時間それぞれの値を取得する

年月日、時間それぞれの値を取得するのは以下の通り。曜日だけweekday()となっていることに注意しましょう。(なんでだ??)

from datetime import datetime

dt = datetime.now()
print("年 :", dt.year)
print("月 :", dt.month)
print("日 :", dt.day)
print("曜日:", dt.weekday())
print("時間:", dt.hour)
print("分 :", dt.minute)
print("秒 :", dt.second)
 

 

曜日ですが、月曜日からスタートして0,1、2…となり、最後が日曜日で6です。今日は土曜日なので「5」と表示されます。

 

日時の加算・減算

日時の加算・減算には、datetime.timedeltaをインポートする必要があります。

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

dt = datetime.now()
print("1日後")
print((dt + timedelta(days=1)).strftime('%Y/%m/%d %H:%M:%S'))
print("1週間後")
print((dt + timedelta(weeks=1)).strftime('%Y/%m/%d %H:%M:%S'))
print("1時間後")
print((dt + timedelta(hours=1)).strftime('%Y/%m/%d %H:%M:%S'))
print("1週間後と1日前")
print((dt + timedelta(weeks=1, days=-1)).strftime('%Y/%m/%d %H:%M:%S'))
 

 

 

なんと、残念ながら、datetime.timedeltaで月や年の加算減算はできません。エラーになります。

月と年はdateutil.relativedeltaオブジェクトが必要になります。pipコマンドでインストールしましょう。

pip install python-dateutil
 

 

その上で下記の通り年月の計算を行います。

from datetime import datetime
from dateutil.relativedelta import relativedelta

dt = datetime.now()
print("1ヶ月後")
print((dt + relativedelta(months=1)).strftime('%Y/%m/%d %H:%M:%S'))
print("1ヶ月後と1日前")
print((dt + relativedelta(months=1, days=-1)).strftime('%Y/%m/%d %H:%M:%S'))
 

 

 

月初・月末を取得する

 

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

dt = datetime.now()

print("今月初")
dt2 = datetime(dt.year,dt.month,1)
print(dt2.strftime('%Y/%m/%d %H:%M:%S'))

print("先月末")
dt2 = datetime(dt.year,dt.month,1) + relativedelta(days=-1)
print(dt2.strftime('%Y/%m/%d %H:%M:%S'))

print("今月末")
dt2 = datetime(dt.year,dt.month,1) + relativedelta(months=1, days=-1)
print(dt2.strftime('%Y/%m/%d %H:%M:%S'))
 

 

 

広告

 - Python