[datetime]モジュールから色々インポートできます。
from datetime import date, time, datetime, timedelta
● 日付
d = date(2017, 12, 6)
print(d) ※2017-12-06
d = date.today()
print(d) ※2017-12-06
● 時刻
t = time(23, 11, 55)
print(t) ※23:11:55
● 日時
dt = datetime(2017, 12, 6, 23, 11, 55)
print(dt) ※2017-12-06 23:11:55
dt = datetime.today() ※datetime.now()でもOK!
print(dt) ※2017-12-06 20:28:20.650628
dt = datetime.utcnow()
print(dt) ※2017-12-06 11:55:00.078622 ※協定世界時(UTC)
dt = datetime.now().timestamp()
print(dt) ※1561472367.435914 タイムスタンプ
● 時間
td = timedelta(0,1200)
print(td) ※0:20:00 0秒から1200秒までの差
● 時間の計算
d = datetime.now() - datetime(2015, 10, 9)
print(d) ※789 days, 20:44:50.295812
d = datetime.now() + timedelta(days = 3, hours = 5, minutes = 10, seconds = 30, milliseconds = 1234 )
print(d) ※2017-12-10 01:55:21.529853
td = timedelta(days = 3, hours = 5 ) * 2
d = datetime.now() + td
print(d) ※2017-12-13 06:44:50.295887
※時間の差を秒で取得
d.total_seconds() / (60 * 60 * 24)
math.ceil(d.total_seconds() / (60 * 60 * 24)) ※import math して、切り捨てると良い
【メモ】
時間の計算は「+-」のみが使用できます。
ただし[timedelta]に関しては「+-*/」全て使えます。
[datetime]モジュールから更に[timezone]をインポートする
from datetime import datetime, timedelta, timezone
独自にタイムゾーンを定義する
例)
myJST = timezone(timedelta(hours = 9), 'Japan') ※時差が9時間を定義している ※第2引数は任意の文字列
d = datetime.now()
print(d) ※2017-12-06 21:19:46.413631
d = datetime.now( tz = myJST )
print(d) ※2017-12-06 21:19:46.413681+09:00
※独自のタイムゾーンを設定する場合は、名前付き引数[tz]を使う
【メモ】
結果、2つの時刻に違いはないが、タイムゾーンを内包した datetime オブジェクトは astimezone メソッドを使って別のタイムゾーン時刻に変換が可能となる。
例)
d = datetime.now( timezone.utc ) ※協定世界時(UTC)のタイムゾーンは timezone.utc で渡せる。
print(d) ※2017-12-06 12:19:46.413703+00:00
d = datetime.now( timezone.utc ).astimezone( myJST )
print(d) ※2017-12-06 21:19:46.413716+09:00
[月]や[日]は強制的に2桁になるっぽい。。
これを回避するには正規表現で置換する方法がある
from datetime import datetime
import re
● オブジェクトから文字列へ変換
d = datetime(2017, 3, 7)
print(d.strftime('%Y年%m月%d日')) ※2017年03月07日
str = d.strftime('%Y年%m月%d日')
str = re.sub(r'0(\d+)', r'\1', str) ※217年3月7日
print(str)
str = '今日は{d:%Y-%m-%d}です。'.format(d = datetime.now())
print(str) ※今日は2017-12-06です。
● 文字列からオブジェクトへ変換
d = datetime.strptime('2017-10-9', '%Y-%m-%d')
d = datetime.strptime('2017年10月9日', '%Y年%m月%d日')
※第2引数のフォーマットを利用して、第1引数の文字列を日付オブジェクトに変換する
【メモ】
日付フォーマットのプレースホルダ
%Y 4桁の年
%y 2桁の年
%m 2桁の月
%d 2桁の日
%H 2桁の時
%M 2桁の分
%S 2桁の秒
%z タイムゾーンのオフセット +0000
%Z タイムゾーンの名前 UTC+00:00