コード一覧

【Python】日付の計算と表示形式

日付の計算方法

1日前とか、30日前とか、現在(今)からどのくらい、前なのか、先なのか、を計算する方法と、好きな形式で表示する方法。
好きな形式とは、〇月〇日や、〇年〇月〇日や〇/〇/〇など。

import datetime

# 現在
now = datetime.datetime.now()

# どのくらいの日数を前後させるかを決める
date = datetime.timedelta(days=30)

# 今から30日前(+にしたら今から30日後)
day = now - date

# 表示形式を決める
day = day.strftime('%Y/%m/%d')

# 計算した日付を表示させる
print(day)

datetimeをimportする

datetimeは、年、月、日、時間、分、秒、マイクロ秒まで取り出せる。
また、曜日や使い方も様々でドキュメントも長い。

ドキュメント 基本的な日付型および時間型

https://docs.python.org/ja/3/library/datetime.html

計算のやり方

同じ型にしないと計算が出来ない。
datetimeは、こんな感じの表示になっている。
2020-04-14 11:28:45.145678
年、月、日、時間、分、秒、マイクロ秒

そのため、同じ型同士で計算しないといけない。
その時使うのが、timedelta
datetime.timedelta(〇〇〇=数字)
の形で使う。
〇〇〇にいれられるのは以下

week
day
hours時間
minutes
seconds
millisecondsミリ秒
microseconds
マイクロ秒

datetimeの計算 同じ型同士

import datetime

now = datetime.datetime.now()
date = datetime.timedelta(days=1)
day = now - date # 本日より1日前 (現時点2020/4/14)
print(day)
# 2020-04-13 12:13:57.753689

違うタイプの計算 違う型同士

import datetime

now = datetime.datetime.now()
today = datetime.date.today()
print(now) #2020-04-14 12:10:01.566262
print(today) #2020-04-14
print(now - today)
# TypeError: unsupported operand type(s)
 for -: 'datetime.datetime' and 'datetime.date'

エラーが出る。

表示形式の指定

表示形式はstrftimeで出来る。
変数.timedelta('%アルファベット')

変数は、dayとかtodayとか自分で決めたもの
例)day = datetime.datetime.now()
# 2020-04-14 12:10:01.566262

import datetime

now = datetime.datetime.now()
print(now.strftime("%Y-%m-%d"))
# 2020-04-14

昨日と明日

from datetime import datetime, date, timedelta
import datetime

# 今日の日付
today = datetime.date.today() 
print(today)


tomorrow = today + timedelta(days=1)
print(tomorrow)
yesterday = today - timedelta(days=1)
print(yesterday)

使えるアルファベット

strftime()の書式一覧のドキュメント
https://docs.python.org/ja/3/library/datetime.html#strftime-and-strptime-format-codes

よく使うものだけ抜粋

%Y西暦4桁 2020
%y西暦下2桁 20
%m月2桁 4月なら04
%d日2桁 1日なら01
%H時間2桁 夕方5時なら17
%M分数2桁 1分なら 01
%S秒数2桁 1秒なら 01
%fマイクロ秒6桁 1なら 000001