適当のごった煮

Pythonと境界標とQGISを中心にいろいろと

Python timeモジュールのまとめ

スポンサードリンク

Pythonで日付などを扱うときに便利なtimeモジュールを自分用にまとめました。

まずは簡単に使える関数。

出力内容 関数 出力例
今の日付と時間(表示は海外式) time.asctime() 'Sat Aug 29 16:09:26 2020'
同上(引数でasctimeとの違い) time.ctime() 'Sat Aug 29 16:09:44 2020'
epocからの経過秒数 time.time() 1598685003.960011
指定秒数スリーブする time.sleep(sec) なし

epocがいつなのかは、time.gmtime(0)で知ることができます。

日付や時刻などの出力順を自分で決めるためには、time.strftime()で整形する必要があります。

出力内容 関数
指定フォーマット通りの文字列を返す time.strftime('指定フォーマット'[, t])

指定フォーマットは下記の通りです。自分の好きな組み合わせで複数指定すれば、思い通りの出力を得ることができます。

出力内容 ディレクティブ 出力例
年(下2桁) %y 20
年(4桁) %Y 2020
月(短縮英語) %b Aug
月(英語) %B August
月(01-12) %m 08
日(01-31) %d 27
時(00-23) %H 22
時(01-12) %I 10
分(00-59) %M 00
秒(00-61) %S 00
曜日(短縮英語) %a Thu
曜日(英語) %A Thursday
曜日(数字0-6、日曜日が0) %w 4
1月1日からの経過日数(001-366) %j 240
第何週目か(日曜始まり) %U 34
第何週目か(月曜始まり) %W 34
年月日(月/日/年の順で各2桁) %x 08/27/20
時分秒(hh:mm:ss) %X 22:00:00
時差 %z +0900
AMかPMか %p PM
タイムゾーン名 %Z 東京 (標準時)
time.ctime()的表現 %c Thu Aug 27 22:00:00 2020

例えば、現在の年月日と時分秒を数値だけで欲しい場合は下記のように指定します。

>>> time.strftime('%Y%m%d%H%M%S')
'20200829164617'
>>> 

任意の日付を指定したい場合は、任意日付のtime.struct_time型の値を取得して、第二引数に指定します。

time.struct_time型は(tm_year=2020, tm_mon=8, tm_mday=26, tm_hour=6, tm_min=20, tm_sec=33, tm_wday=2, tm_yday=239, tm_isdst=0)のような名前付きタプルです。属性値は、ほかにタイムゾーンのtm_zoneとUTCからの差のtm_gmtoffがあります。

time.struct_time型を取得するには下記のメソッドなどを利用します。

出力内容 メソッド
実行時点のtime.struct_time型を取得 time.localtime()
文字列を指定フォーマットで解釈 time.strptime('文字列', '指定フォーマット')

time.strptime()は少々使い方がややこしく見えますが、使ってみると便利です。指定フォーマットは上記のtime.strftime()と同じです。例えば、2020年1月1日の曜日は下記のように求められます。

>>> time.strptime('2020 1 1', '%Y %m %d')
time.struct_time(tm_year=2020, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=1, tm_isdst=-1)
>>> 

time.struct_time型のtm_wdayは、0から6までの数値で、0が月曜日を表しているため、2020年1月1日は水曜日であることが分かります。フォーマット指定の%wは0が日曜日を表しているので注意が必要です。

また、%jを使って、2020年の100日目は何月何日か、を調べてみます。

>>> time.strptime('2020 100', '%Y %j')
time.struct_time(tm_year=2020, tm_mon=4, tm_mday=9, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=100, tm_isdst=-1)
>>> 

以上の結果から、4月9日が2020年の100日目であることが分かります。1月と3月が31日で、今年の2月は29日あるので、確かに4月9日が100日目が正解です。

これらのtime.struct_time型をtime.strftime()の第二引数とすれば、日付や時刻をかなり思い通りに表せます。

参考

time --- 時刻データへのアクセスと変換