Pythonで日時のデータを扱う:datetime

Pythonで日付や時刻を扱う場合は datetime モジュールを使用します。今回は datetime モジュールを使って日時の取得、生成、演算、比較、表示を行う方法などについて説明します。

現在の日時を取得する:today

日付を扱う場合は datetime モジュールの date クラスを使用します。

dateクラスの today() を使用すれば現在の時刻を取得できます。

datetime.date.today()

以下のように日付の各要素を取得することができます。

# -*- coding: utf-8 -*-

import datetime

today = datetime.today    # 現在の日付を取得

print(today.year)     # 年: 2016
print(today.month)    # 月: 2
print(today.day)      # 日: 23

現在の日付と時刻を取得する

日付と時刻を扱う場合は datetime モジュールの datetime クラスを使用します。

datetime クラスの now() を使用すれば現在の日付を取得できます。

datetime.dateime.now()

以下のようにすると日時の各要素を取得することができます。

# -*- coding: utf-8 -*-

import datetime

now = datetime.dateime.now() # 現在の日時を取得

print(now.year)           # 年: 2016
print(now.month)          # 月: 2
print(now.day)            # 日: 23
print(now.hour)           # 時: 11
print(now.minute)         # 分: 53
print(now.second)         # 秒: 42
print(now.microsecond)    # マイクロ秒: 728665

指定した日時のオブジェクトを生成する

指定した日時のオブジェクトを生成する場合は、 datetime() を用いてオブジェクトを生成します。

datetime.datetime(年, 月, 日[, 時[, 分[, 秒[, マイクロ秒[, タイムゾーン]]]]])

以下のプログラムは、2016年2月22日22時22分22秒という日時を生成する例です。

import datetime

d = datetime.datetime(2016, 2, 22, 2, 22, 22)
print(d)    # 2016-02-22 02:22:22

指定した時刻のオブジェクトを生成する

指定した時刻のオブジェクトを生成する場合は、time() を用いてオブジェクトを生成します。

datetime.time([時, [分, [秒, [, マイクロ秒, タイムゾーン]]]]])

以下のプログラムは、12時34分56秒という日時を生成する例です。

import datetime

t = datetime.time(12, 34, 56)
print(t)    # 12:34:56

日時の演算と比較:timedelta

日時を比較する場合は、datetime オブジェクト同士を差を求めることで比較することができます。datetime のオブジェクト同士を演算子した結果は timedelta クラスのオブジェクトして返されます。

# -*- coding: utf-8 -*-

import datetime

d1 = datetime.datetime(2016, 6, 27, 12, 11, 30)
d2 = datetime.datetime(2015, 6, 27, 11, 10, 0)
td = d1 - d2

print(td)               # 差分: 366 days, 1:01:30
print(td.days)          # 日: 366
print(td.seconds)       # 秒: 3690
print(td.microseconds)  # マイクロ秒: 0

timedelta オブジェクトは日、秒、マイクロ秒のデータが内部的に保存されており、days, seconds, microseconds メソッドを使用することにより情報を取得することができます。

日時の差分を生成する

timedelta を使用すれば、n 日後や n 秒前といった日時を生成することでもできます。temedelta のオブジェクトと加減算を行っても date や datetime オブジェクトの型はそのままの型のままです。

以下は現在日時から10日後を生成するサンプルコードです。

import datetime

d1 = datetime.date(2016, 6, 27)
td = datetime.timedelta(days=10)
d2 = d1 + td

print(d2) # 2016-07-07

timedelta は weeks, days, hours, minutes, seconds などをキーワード指定で引数に渡すことによって、指定した差分を生成することができます。これらの引数は複数指定することもできます。

日時を比較する

日時のオブジェクトを比較するときは、比較演算子を使用することができます。

import datetime

d1 = datetime.date(2016, 6, 27)
d2 = datetime.date(2016, 7, 27)

print(d2 > d1)  # True
print(d1 == d2) # False

曜日を取得する

曜日を取得する場合は、weekday() メソッドを使用します。weekday() は月曜日から日曜日までの曜日を 0 から 6 の整数で返します。

import datetime

d1 = datetime.date(2016, 6, 27)
d2 = datetime.date(2016, 6, 28)

print(d1.weekday()) # 0
print(d2.weekday()) # 1

上のプログラムでは整数が出力されますが、整数と対応する曜日から、2016年6月27日は月曜日、2016年6月28日は火曜日であることが確認できます。

日時の文字列フォーマット:strftime

strftime メソッドを使用して日時を整形して表示することができます。

strftime(フォーマット文字列)

strftime はフォーマット後の文字列を返します。

以下は文字列フォーマットを使用したサンプルコードです。

# -*- coding: utf-8 -*-

import datetime

d = datetime.date(2016, 6, 27)
print(d.strftime("%y年%m月%d日")) # 16年06月27日

文字列フォーマットに使用できるオプションはこちらを参考にしてください。


イベント

2017/12/05(火)
Design Thinking Square