昨日、Twitterが吐き出すcreated_atを文字列型であるvarcharに保存したのですが、これ、検索に全く使えないですね笑 しっかりtime型で保存できるように、UNIX時間 → 日本時間に変換したいと思います。 Pythonで時間を操作するにはtimeモジュールとdatetimeモジュールを使うらしいです。これはもともとPythonに附属されてますので、pip installしないで良いそうです。
Python公式ページ https://docs.python.jp/3/library/time.html
コードはこんな感じです。 まず、time.strptimeを使って、Twitterが返す時刻に合わせて時間を解釈します。第一引数にTwitter APIが返す引数、第二引数にTwitter APIが持っている情報を示します。
printするとこんなのが出力されます。
time.struct_time(tm_year=2018, tm_mon=7, tm_mday=2, tm_hour=19, tm_min=54, tm_sec=22, tm_wday=0, tm_yday=183, tm_isdst=-1)
↑この形式をUTC のstruct_timeというらしいですが、calendar.timegm関数に入れれば、エポックからの秒数に変換されます。それで、これをtime.localtime関数に入れると日本時間に変換されます。後は出力の形式をtime.strftime関数に入れれば完成です。
import sys, json, time, calendar time_utc = time.strptime(created_data, '%a %b %d %H:%M:%S +0000 %Y') unix_time = calendar.timegm(time_utc) time_local = time.localtime(unix_time) japan_time = time.strftime("%Y-%m-%d %H:%M:%S", time_local)
実行結果。
2018-07-02 13:05:22
これで、DATETIME('0000-00-00 00:00:00')に保存できそうですね。 データベースのテーブルを再生成して、Pythonを実行してみます。
create table tweet3( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, created_data DATETIME NOT NULL, name varchar(50) NOT NULL, tweet varchar(255) UNIQUE NOT NULL, count_tweets int, count_follows int, count_followers int, count_favolites int, count_lists int, users_favorites int, retweet int, favorite int, datesp DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
無事に保存できました。 本当は日本戦の前に完成させたかったです。