こしあん
2020-06-18

Pythonで最も簡単にタイムスタンプ←→文字列や時差変換する方法


13.5k{icon} {views}

Pythonでタイムスタンプの文字列をパースするには「time.strftime」が紹介されることが多いですが、実はもっと簡単な方法があります。この方法では、グリニッジ標準時→東京時間のような時差変換(時差を意識したタイムスタンプへの変換)も同時に行うことができ、とても便利です。

日付データは困ったちゃん

Pythonに限ったことではないですが、一般に日付データはバグの温床となりやすいです。例えば、

  • タイムスタンプの文字列フォーマットがいろいろある
    (Tue, 03 Jul 2018 05:40:23 +0000 や 2017-03-12T11:50:40+09:00)
  • 時差はどこを基準にしているのか
  • もしタイムスタンプ文字列が時差のデータを持っていない場合、変換時にどの地域の時差を指定しているのか(処理環境依存で時差が振られる)

などなど、日付データは厄介な問題を抱えがちな困ったちゃんです。日付データの変換をいちいち自分で書かかずに、いい感じにやってくれるライブラリがあるととても嬉しいのです。

pandasを使う

いい感じに変換してくれるクラスは実はpandasにあります。pd.Timestampを使います。

import pandas as pd

t1 = pd.Timestamp("Tue, 03 Jul 2018 05:40:23 +0000")
t2 = pd.Timestamp("2017-03-12T11:50:40+09:00")

print(t1) # 2018-07-03 05:40:23+00:00
print(t2) # 2017-03-12 11:50:40+09:00

ワンライナーでできてとても便利。

タイムゾーン変換をしたい場合

読み込み時にタイムゾーンを変換したい場合は、「tz=」以下にタイムゾーンを指定します。t1を東京時間、t2をグリニッジ標準時に変換してみます。

import pandas as pd

t1 = pd.Timestamp("Tue, 03 Jul 2018 05:40:23 +0000", tz="Asia/Tokyo")
t2 = pd.Timestamp("2017-03-12T11:50:40+09:00", tz="GMT")

print(t1) # 2018-07-03 14:40:23+09:00
print(t2) # 2017-03-12 02:50:40+00:00

いちいち足し算引き算をする必要はありません。

文字列に戻したい場合

pd.Timestampから文字列に変換したい場合は、単にstrでキャストします。

import pandas as pd

t1 = pd.Timestamp("Tue, 03 Jul 2018 05:40:23 +0000", tz="Asia/Tokyo")
str_t1 = str(t1)

print(str_t1) # 2018-07-03 14:40:23+09:00
print(len(str_t1)) # 25 (文字数)

あまりにお手軽なので、日付処理のためだけにPandasを使うの大アリでしょう。



Shikoan's ML Blogの中の人が運営しているサークル「じゅ~しぃ~すくりぷと」の本のご案内

技術書コーナー

北海道の駅巡りコーナー


Add a Comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です