datetimeモジュール
datetimeモジュールでは、以下4個のメインオブジェクトを定義しています。
- 年⽉⽇を対象にするdate
- 時分秒を対象にするtime
- ⽇時と時刻両⽅を対象にするdatetime
- ⽇付と時刻の間隔を対象にするtimedelta
同じような名前のオブジェクトが含まれていますので初心者は混乱しそうです。
Pythonに慣れるまでは、⽇時関連のモジュール読み込みは⼤元のdatetimeモジュールを読み込む⽅法がお勧めです。
import datetime
それぞれのオブジェクトを読み込むのは少し⾯倒ですが、from文では⽤途ごとに違う記述が必要になります。
from datetime import date from datetime import time
日付の表示
dateオブジェクトでは年月日を作成することができます。
date(year, month, day)
birthday = datetime.date(1970,1,31) print(birthday)
結果
1970-01-12
day,month,year属性の使⽤⽅法
人にわかりやすいように年月日の表示をするには年月日の値を個別に取り出して表示させることもできます。
datetime.date()で取り出した日付のオブジェクトはday属性、month属性、year属性で取得できます。
birthday.day #12 birthday.month #1 birthday.year #1970
ISO 8601のフォーマット
ISO 8601のフォーマットで書き出すにはisoformat()関数を使います。
birthday.isoformat() # '1970-01-12'
今⽇の⽇付
today()メソッドは今⽇の⽇付を返します。
now = datetime.date.today() print(now)
結果
2020-01-11
dateオブジェクトの範囲
dateオブジェクトは、1年1⽉1⽇から9999年12⽉31までしか使⽤できません。
print('dateの最⼩値:',datetime.date.min) print('dateの最⼤値:',datetime.date)
結果
dateの最⼩値: 0001-01-01
dateの最⼤値: 9999-12-31
timedeltaオブジェクトの使い⽅
何⽇後とか何⽇前などのdateの範囲は、timedeltaオブジェクトを使います。
timedeltaオブジェクトのコンストラクタ
one_day = datetime.timedelta(days=1) tomorrow = now + one_day #datetime.date(2019, 11, 23) now + 14*one_day # datetime.date(2019, 12, 6) now - one_day #datetime.date(2019, 11, 21)
時間の表⽰
時間の表⽰はtimeオブジェクトを使います。
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
datetime.time(16, 10, 20) #datetime.time(16, 10, 20)
日付と時間の表示
日付と時間を合わせて表示するには、datatimeオブジェクトの中のdatetimeオブジェクトを使ういます。
現在時間の表示は、datatimeオブジェクトの中のdatetimeオブジェクトの中のnow()関数を使います。
Colaboratoryの場合、Googleのサーバーが示す時間になります。
おそらくGoogleのサーバーの時間設定は、世界中のどこからでも使いやすいようにUTC(グリニッジ標準時)に設定されています。
now = datetime.datetime.now() print(now) print(now.year,'年') print(now.month,'月') print(now.day,'日') print(now.hour,'時') print(now.minute,'分') print(now.second,'秒') print(now.microsecond,'マイクロ秒')
結果
2019-11-22 03:28:03.893640
2019 年
11 月
22 日
3 時
28 分
3 秒
893640 マイクロ秒
日本時間に変更
UTC時間に9時間加算するだけです。
now = datetime.datetime.now() + datetime.timedelta(hours=9) print(now) print(now.year,'年') print(now.month,'月') print(now.day,'日') print(now.hour,'時') print(now.minute,'分') print(now.second,'秒') print(now.microsecond,'マイクロ秒')
結果
2019-11-22 12:28:09.097727
2019 年
11 月
22 日
12 時
28 分
9 秒
97727 マイクロ秒