Pythonで日付と時間を扱う方法

Pythonで日付と時間を扱う方法

datetimeモジュール

datetimeモジュールでは、以下4個のメインオブジェクトを定義しています。

  • 年⽉⽇を対象にするdate
  • 時分秒を対象にするtime
  • ⽇時と時刻両⽅を対象にするdatetime
  • ⽇付と時刻の間隔を対象にするtimedelta

同じような名前のオブジェクトが含まれていますので初心者は混乱しそうです。
Pythonに慣れるまでは、⽇時関連のモジュール読み込みは⼤元のdatetimeモジュールを読み込む⽅法がお勧めです。

import datetime
[/pytghon]

それぞれのオブジェクトを読み込むのは少し⾯倒ですが、from文では⽤途ごとに違う記述が必要になります。

[python]
from datetime import date
from datetime import time

日付の表示

dateオブジェクトでは年月日を作成することができます。

dateオブジェクトのコンストラクタ
date(year, month, day)

birthday = datetime.date(1970,1,31)
birthday

結果
datetime.date(1970, 1, 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()
now

結果
datetime.date(2019, 11, 22)

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オブジェクトのコンストラクタ

timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

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オブジェクトのコンストラクタ
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

datetime.time(16, 10, 20) #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 マイクロ秒