IT技術で仕事を減らしたい!

ITエンジニアのメモ+α

Python datatimeでの時間の取り扱い

どうも、nippa です。

本日は python の datetime に関してです。

時系列データで dataime を使うのですが、毎回使い方を忘れてしまい時間のロスが起きています。

この際ある程度まとめてしまって、この記事を参照しようと思います。

正式なドキュメントは

python 標準ライブラリ: datetime --- 基本的な日付型および時間型

を参考にしてください。

環境

datetime ライブラリ

以下でライブラリを import できます。

import datetime

strptime(): 文字列 → datetime 型

形式: datetime.strptime(data_string, format)

strptime で datetime 型に変換できます。

例として、2020-11-07 21:20:00.0[+090000.0000]を detatime 型に変換してみます。

time = datetime.datetime.strptime('2020-11-07 21:20:00.0[+090000.0000]', '%Y-%m-%d %H:%M:%S.%f[%z]')
print(type(time))
# 出力
<class 'datetime.datetime'>

print(time)
# 出力
2020-11-07 21:20:00+09:00

書式コードは以下を参考にしてください。

Python 標準ライブラリ: datetime --- 基本的な日付型および時間型 strftime() と strptime() の書式コード

strftime(): datetime 型 → 文字列

形式:datetime.strftime(format)

strftime 関数で datetime 型から文字列に変換できます。

time = datetime.datetime.now()
print(time.strftime('%Y-%m-%d %H:%M:%S.%f'))
# 出力
2020-11-07 21:20:00.000000

print(time.strftime('%c'))
# 出力
Fri Nov  7 21:20:00 2020

書式コードは以下を参考にしてください。

Python 標準ライブラリ: datetime --- 基本的な日付型および時間型 strftime() と strptime() の書式コード

timestamp(): datetime → timestamp

形式: datetime.timestamp()

time = datetime.datetime.strptime('2020-11-07 21:20:00.0[+090000.0000]', '%Y-%m-%d %H:%M:%S.%f[%z]')

print(time.timestamp())

# 出力
1604751600.0

時間の計算ではタイムゾーンを考慮せずにできるので、重宝します。

fromtimestamp(): timestamp → datetime

形式:datetime.fromtimestamp(timestamp, tz=None)

timestamp = datetime.datetime.fromtimestamp(1604751600.0)

print(timestamp)
# 出力
2020-11-07 21:20:00

timezone の設定と確認

タイムゾーンの扱いをまとめておきます。

タイムゾーンの設定

形式:datetime.timezone(offset, name=None)

タイムゾーンの確認

形式:datetime.tzinfo

タイムゾーンの置き換え

形式:datetime.replace(tzinfo=[datetime.timezone])

JST = datetime.timezone(+datetime.timedelta(hours=9))

timestamp = datetime.datetime.fromtimestamp(1604751600.0, tz=JST)

print(timestamp)
# 出力
2020-11-07 21:20:00+09:00

print(timestamp.tzinfo)
# 出力
UTC+09:00

# UTCの設定
UTC = datetime.timezone(+datetime.timedelta(hours=0))
timestamp = timestamp.replace(tzinfo=UTC)

print(timestamp)
#出力
2020-11-07 21:20:00+00:00

print(timestamp.tzinfo)
# 出力
UTC

timedelta

時間幅、日付幅を指定するようなときに、利用します。

形式: datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

time = datetime.datetime.strptime('2020-11-07 21:20:00.0[+090000.0000]', '%Y-%m-%d %H:%M:%S.%f[%z]')
one_hour_ago = time - datetime.timedelta(hours=1)

print(one_hour_ago)
# 出力
2020-11-07 20:20:00+09:00

感想

datetime のよく使うものをまとめました。datetime ライブラリのページでは詳細は確認できますので、足りない情報はそちらで確認いただければと思います。

これである程度、datetime について検索に時間をかけずに済むようになるようになるかと思います。

よく使う Python のライブラリは今後もまとめていきたいと思います。

ではでは、また次回。