本記事は、過去に他のブログで書いたものを引っ越ししてきた記事になります。
Pythonで時間や日時を扱うtimeモジュールとdatetimeモジュールについて、よく利用する操作を自分用にまとめました。必要に応じて追記していきます。
時間や日時を表すモジュール
Pythonで時間や日時に関する処理を行うモジュールには、よく使うものにtimeとdatetimeがあります。
主なデータ型
これらのモジュールを使って扱う主なデータ型は、次のように整理できます。
呼称 | データ型 | モジュール | 表示例 | 備考 |
---|---|---|---|---|
①UNIXエポックに基づくタイムスタンプ | float型 | time | 1612587698.479415 | エポックタイムからの秒数 整数値または浮動小数点値 |
②特定の日時 | datetime型 | datetime | 2021-02-06 14:02:23.592996 | date() , time() メソッドの戻り値はdatetime型他それぞれの属性は整数値 |
③datetime同士の時間差 | timedelta型 | datetime | 0:00:03.003681 | それぞれの属性は整数値 |
- UNIXエポックタイムは、多くのプログラミング言語で使われる標準的な参照時間(1970/1/1 0:00 UTC(協定世界時))のこと。
- そのUNIXエポックタイムからの経過時間をエポックタイムスタンプと呼びます。
import time import datetime # ①UNIXエポックに基づくタイムスタンプ float型 epoch = time.time() print(epoch) # -> 1612587698.479415 print(type(epoch)) # -> <class 'float'> # ②特定の日時 datetime型 dt = datetime.datetime.now() print(dt) # -> 2021-02-06 14:02:23.592996 print(type(dt)) # -> <class 'datetime.datetime'> # ③datetime同士の時間差 timedelta型 td = datetime.timedelta(seconds=3) print(td) # -> 0:00:03.003681 print(type(td)) # -> <class 'datetime.timedelta'>
ちなみに、「②特定の日時」を表すデータ型には、他にも「date型」と「time型」というのがあります。ですが、基本的には日付と時刻がまとまっている「datetime型」を使えば問題ないのかなと思ってます。
datetime型を扱う
datetime型の使い方を整理しておきます。
datetimeオブジェクトの生成
特定の日時を表すdatetimeオブジェクトを扱うには、datetimeモジュールのdatetimeクラスを使います(まぎらわしい)。
現在日時を表すdatetimeオブジェクトを生成するには、datetime.now()
を使います(datetimeモジュールのdatetimeクラスのnow()
メソッドを呼び出す)。
指定した日時のdatetimeオブジェクトを生成するには、datetime()
を使います(datetimeモジュールのdatetimeクラスのコンストラクタを呼び出す)。
from datetime import datetime now = datetime.now() # 現在日時 dt = datetime(2021, 1, 1, 10, 00, 00) # 日時を指定(年、月、日、時間、分、秒)
生成したdatetimeオブジェクトは、以下のような属性にアクセスすることができます。
属性 | 意味 |
---|---|
year | 年 |
month | 月 |
day | 日 |
hour | 時間 |
minute | 分 |
second | 秒 |
microsecond | ミリ秒 |
from datetime import datetime dt = datetime(2021, 1, 1, 10, 00, 00) # 日時を指定(年、月、日、時間、分、秒) print(dt.year, dt.month, dt.day) # 2021 1 1
datetime→文字列に型変換
datetimeオブジェクトは、strftime()
メソッドでフォーマットした文字列として表示させることができます。
メソッドの引数には、変換したい書式コード文字列(後述の表参照)を渡します。
ちなみにメソッド名の「str」は文字列、「f」はフォーマット(整形)の意味のようです。
from datetime import datetime dt = datetime.now() print(dt.strftime('%Y/%m/%d'))
よく使う書式コード一覧
書式 | 意味 | 例 |
---|---|---|
%Y | 西暦 4桁 | '2021' |
%y | 西暦 2桁 | '00'〜'99' |
%m | 月(0埋め) | '01'〜'12' |
%d | 日 | '01'〜'31' |
%w | 曜日 | '0'(日曜)〜'6'(土) |
%H | 時(24時間制) | '00'〜'23' |
%h | 時(12時間制) | '01'〜'12' |
%M | 分(0埋め) | '00'〜'59' |
%S | 秒(0埋め) | '01'〜'31' |
こんな書式コードもあるよ
書式 | 意味 | 例 |
---|---|---|
%B | 月名 | 'January' |
%b | 月の略称 | 'Jan' |
%A | 曜日名 | 'Sunday' |
%a | 曜日の略称 | 'Sun' |
%j | 年初からの日数 | '001'〜'366' |
%p | AMかPMか | 'AM', 'PM' |
%c | 日時をまとめて表示 | 'Sun Feb 7 12:57:18 2021' |
%x | 日付をまとめて表示 | '02/07/21' |
%X | 時間をまとめて表示 | '12:57:18' |
%% | %文字 |
※書式コードの詳細については公式ドキュメント参照
文字列→datetimeに型変換
今度は先ほどと逆に、日付情報の入った文字列を、datetime.strptime()
メソッドでdatetimeオブジェクトに変換することができます。
メソッドの第1引数には変換したい文字列を、第2引数に対応する書式コード文字列を渡します。文字列が正確にマッチしないとValueError
例外が発生するので、注意しましょう。
ちなみにメソッド名の「str」は文字列、「p」はパース(構文解析)の意味のようです。
from datetime import datetime date = datetime.strptime('20200207', '%Y%m%d') print(date) # -> 2020-02-07 00:00:00 print(type(date)) # -> <class 'datetime.datetime'>