こしあん
2020-06-18

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

Pocket
LINEで送る
Delicious にシェア

680{icon} {views}

書籍情報

技術書典8の新刊『モザイク除去から学ぶ 最先端のディープラーニング』(A4・195ページ)好評通販中です! 機械学習の入門からGANの最先端までを書いたおすすめの本となっています! Boothで試し読みできます。情報まとめ・質問用GitHub



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の中の人が運営しているサークル「じゅ~しぃ~すくりぷと」では、技術書・その他の本のごったまぜ通販をしています! 大人気のモザイク除去から北の駅巡りまでごちゃごちゃ感をお楽しみください!

技術書コーナー

(1) モザイク除去から学ぶ最先端のディープラーニング

技術書典8の新刊『モザイク除去から学ぶ 最先端のディープラーニング』好評通販中(A4・195ページ)です! Boothから試し読みできます!

(2) Shikoan's ML Blog

このブログが電子書籍になりました! 1冊オムニバス形式で200P超の大ボリューム。どこから読んでもOKなので、ぜひ通勤・通学のお供にどうぞ。

北の鉄道コーナー

Vol.1:日高本線 車なし全駅巡り


Pocket
LINEで送る
Delicious にシェア

Add a Comment

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