ユーニックス総合研究所

  • home
  • archives
  • python-datetime

Pythonのdatetimeの使い方: 現在時刻を得る、文字列を時刻に変換する

  • 作成日: 2020-10-29
  • 更新日: 2023-12-24
  • カテゴリ: Python

Pythonのdatetimeの使い方

Pythonには基本的な日付や時刻を扱うためのモジュール「datetime」があります。

このモジュールを使うことで現在時刻の取得や、文字列のdatetimeオブジェクトへの変換などを行うことが出来ます。

現在時刻の取得

datetimeモジュールを使って現在時刻を取得するには、まずdatetimeモジュール内のdatetimeモジュールをインポートします。
そのdatetimeモジュールのnow関数を呼び出すことで現在のローカルな日時を得ることが可能です。

↓のようにして現在時刻を取得して出力します。

from datetime import datetime  

now = datetime.now()  

print(now)  

出力結果。

2020-09-30 17:06:31.810916  

datetime.now()の返り値

datetime.now()の返り値の型は<class 'datetime.datetime'>です。
よってhourminuteなどの属性にアクセス可能です。

from datetime import datetime  

now = datetime.now()  

print('year', now.year)  
print('month', now.month)  
print('day', now.day)  
print('hour', now.hour)  
print('minute', now.minute)  
print('second', now.second)  

出力結果。

year 2020  
month 9  
day 30  
hour 17  
minute 41  
second 45  

タイムゾーンの指定

datetime.now()の第1引数にはタイムゾーンを指定することが出来ます。
タイムゾーンはdatetimeモジュールのtimezoneクラスとtimedeltaクラスで生成します。
timedeltaクラスで時刻の差分を生成し、timezoneクラスに渡します。

from datetime import datetime, timedelta, timezone  

jst_tz = timezone(timedelta(hours=9), 'JST')  

print(datetime.now(jst_tz))  
print(datetime.now())  

出力結果。

2020-09-30 17:17:54.686803+09:00  
2020-09-30 17:17:54.686803  

↑の1つ目の出力はタイムゾーンが有効になっているため+09:00が付加されています。

文字列を時刻に相互変換する

datetimeモジュールには文字列から時刻を生成する&またはその逆の手段がいくつか用意されています。
代表的なのがstrftime()strptime()を使った方法です。

これらの一番の違いは、strftime()はオブジェクトと指定された文字列で文字列を生成するのに対して、strptime()は純粋な文字列からオブジェクトを生成する点です。

strftime()でオブジェクトから文字列を生成

strftime()datetimeオブジェクトから文字列を生成するには↓のようにします。

from datetime import datetime  

now = datetime.now()  
s = now.strftime('%Y-%m-%d')  

print(type(s))  
print(s)  

出力結果。

<class 'str'>  
2020-09-30  

strptime()で文字列をオブジェクトに変換

文字列を解析させてdatetimeオブジェクトを生成したい場合はstrptime()を使います。
strptime()の第1引数に時刻を表す文字列、第2引数に第1引数のフォーマットを渡します。
第2引数のフォーマットというのは「このフォーマットで第1引数を解析せよ」という開発者からstrptime()に送る助け船です。
strptime()はこの助け船の力を借りて文字列をパースします。

from datetime import datetime  

s = '2020-01-01 01:23:45'  
d = datetime.strptime(s, '%Y-%m-%d %H:%M:%S')  

print(type(d))  
print(d)  

問題

Q1: 現在時刻を取得したい時に適当な関数を答えよ

  1. now
  2. timezone
  3. timedelta

Q2: 文字列をdatetimeオブジェクトに変換したいとき適した関数を答えよ

  1. timezone
  2. strptime
  3. strftime

Q3: datetimeオブジェクトから時刻を文字列として抽出したい時に適した関数を答えよ

  1. strftime
  2. strptime
  3. now

問題の正解はこちら↓。

Q1: 1
Q2: 2
Q3: 1