目的
確認しないといけない日が来るかも?と思いながら、参考サイトを見ながら
色々試してみる
※自分用の確認メモ。
サンプルコード
PS > python -V
Python 3.7.2
# Windows Add env PYTHONIOENCODING = UTF-8 & restart vscode
from datetime import datetime, date, time, timedelta
from dateutil.relativedelta import relativedelta
# pip3 install python-dateutil
#
# 3.xで系でサポートされているバージョンにばらつきがあるので
# 使用前にはDocを確認する
#
現在のローカルな datetime
print(type(datetime.now()))
# <class 'datetime.datetime'>
print(datetime.now())
# 2019-02-09 21:43:18.936348
現在のローカルな日付および時刻を返す
print(type(datetime.today()))
# <class 'datetime.datetime'>
# 書式無しでは print 不可
書式文字列に従った文字列を返す
# date.strftime
# 明示的な書式文字列で制御された、日付を表現する文字列を返す
print(type(datetime.today().strftime('%Y/%m/%d')))
# <class 'str'>
print(datetime.today().strftime('%Y/%m/%d'))
# 2019/02/09
print(datetime.today().strftime('%Y/%m/%d %H:%M:%S'))
# 2019/02/09 21:43:18
# print(datetime.today().strftime('%Z'))
# TODO time-zone
日付の一部を変更する
# date.replace(year=self.year, month=self.month, day=self.day)
# キーワード引数で指定されたパラメータで置き換えられた
# date オブジェクトを返す
print(type(datetime.today().replace(month=3)))
# <class 'datetime.datetime'>
print(datetime.today().replace(month=3).strftime('%Y/%m/%d'))
# 2019/03/10 : 2月 -> 3月に変更
print(datetime.today().replace(day=1).strftime('%Y/%m/%d'))
# 2019/02/01 : 当月1日に変更
日付を表す文字列 -> datetime に変換する
# datetime.strptime(date_string, format)
# date_string に対応した datetime を返す
print(type(datetime.strptime('2019/02/09', '%Y/%m/%d')))
# <class 'datetime.datetime'>
print(datetime.strptime('2019/02/09', '%Y/%m/%d'))
# 2019-02-09 00:00:00
print(datetime.strptime('2019/02/09 21:41:28', '%Y/%m/%d %H:%M:%S'))
# 2019-02-09 21:41:28
年月日を数字で取得する
print(type(datetime.today().year))
# <class 'int'>
print(datetime.today().year) # 2019
print(datetime.today().month) # 2
print(datetime.today().day) # 9
曜日を整数で返す
print(datetime.weekday(datetime.today()))
# 5 : 月曜日を 0、日曜日を 6
print(datetime.isoweekday(datetime.today()))
# 6 : 月曜日を 1、日曜日を 7
キーワード引数で指定された項目に加減算を行う
# datetime.timedelta(days=0, seconds=0, microseconds=0,
# milliseconds=0, minutes=0, hours=0, weeks=0)
# 二つの日付や時刻間の差を表す(分かりづらい・・・)
# 前日
print((datetime.today() - timedelta(days=1)).strftime('%Y/%m/%d'))
# 翌日
print((datetime.today() + timedelta(days=1)).strftime('%Y/%m/%d'))
キーワード引数で指定された項目に加減算を行う
# from dateutil.relativedelta import *
# pip3 install python-dateutil
# The order of attributes considered when this
# relativedelta is added to a datetime is:
# Year Month Day Hours Minutes Seconds Microseconds
print(type(relativedelta(months=1)))
# <class 'dateutil.relativedelta.relativedelta'>
# 翌日
dt = datetime.today() + relativedelta(days=1)
print(dt.strftime('%Y/%m/%d'))
# 前日
dt = datetime.today() - relativedelta(days=1)
print(dt.strftime('%Y/%m/%d'))
# 当月1日
dt = datetime.today().replace(day=1)
print(dt.strftime('%Y/%m/%d')) # 2019/02/01
# 次月1日
dt = datetime.today().replace(day=1) + relativedelta(months=1)
print(dt.strftime('%Y/%m/%d')) # 2019/03/01
# 当月末日
dt = datetime.today().replace(day=1) + relativedelta(months=1) \
- relativedelta(days=1)
print(dt.strftime('%Y/%m/%d')) # 2019/02/28
参考にしたのは以下のサイト
Pythonで翌日や翌月みたいな日付の計算をする
datetime --- 基本的な日付型および時間型
strftime() と strptime() の振る舞い
dateutil - powerful extensions to datetime
relativedelta - Examples