計測ログなどのタイムスタンプログをエクセルで読もうとすると、ちょっと癖があって困る。列や文字列が思ったように表示できない、といった経験がありますでしょうか。
これから取るデータならログ形式を変えれば済むのですが、既にとったものは困りますよね。
また、経過時間を求めるのもなかなか困りものです。大量のログをエクセルで捌くとファイルサイズが大きくなって使いづらくなる、とかです。
そんな場合に便利な方法として、タイムスタンプ文字列をタイムスタンプに戻す方法をご紹介します。
やること
・タイムスタンプ文字列をdatetime形式で読みとる
・datetime形式からタイムスタンプに戻す
応用例
・タイムスタンプ文字列を別のタイムスタンプ文字列に変換する
・タイムスタンプから経過時間を求める
それでは順番に見ていきましょう!
順番にみていく
タイムスタンプ文字列をdatetime形式で読みとる
タイムスタンプ文字列として「2023-05-01 08:00:00」を想定してみます。
この文字列をまずはdatetime形式で読み取ります。
import time
import datetime
timestamp_string = '2023-05-01 08:00:00'
past_time = datetime.datetime.strptime(timestamp_string, '%Y-%m-%d %H:%M:%S')
プリントすると「2023-05-01 08:00:00」になります。
元の文字列と一見ちがいが無いように見えるのですが、実は違っています。
attribute(属性)が追加されて、色んな変換ができる状態になっています。
datetime形式からタイムスタンプに戻す
次はdatetime形式からタイムスタンプに戻します。
import time
import datetime
past_timestamp = time.mktime(past_time.timetuple())
とてもシンプルですね。属性が追加されたことで簡単に変換できるようになりました。
タイムスタンプに戻したことで加工しやすくなりました。
例えば、別のタイムスタンプ文字列に変換したり、経過時間を求めたりが簡単にできるようになります。
応用例をご紹介したいと思います。
応用例
タイムスタンプ文字列を別のタイムスタンプ文字列に変換する
タイムスタンプ文字列を別のタイムスタンプ文字列に変換してみます。
「2023-05-01 08:00:00」を「2023/05/01 08-00-00」に変換します。
import time
import datetime
#文字列sample
timestamp_string = '2023-05-01 08:00:00'
past_time = datetime.datetime.strptime(timestamp_string, '%Y-%m-%d %H:%M:%S')
#datetime形式からタイムスタンプにする
past_timestamp = time.mktime(past_time.timetuple())
#タイムスタンプから別のタイムスタンプ文字列にする
date_time = datetime.datetime.fromtimestamp(past_timestamp).strftime('%Y/%m/%d %H-%M-%S')
#結果比較
print(timestamp_string)
print(date_time)
「’%Y-%m-%d %H:%M:%S’」の部分の組み合わせを変えれば、自由に形式を変換できます。
実行結果がこちらです。
![](https://atosuko.com/wp-content/uploads/2023/05/convert-log-timestamp-string-back-to-timestamp-in-python3.jpg)
タイムスタンプから経過時間を求める
次は経過時間を求めてみます。現在時刻と、過去のタイムスタンプ文字列から経過時間を求めています。
import time
import datetime
#現在時刻
timestamp = time.time()
now = datetime.datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S')
#過去時刻 fromタイムスタンプ文字列
timestamp_string = '2023-05-01 08:00:00'
past_time = datetime.datetime.strptime(timestamp_string, '%Y-%m-%d %H:%M:%S')
past_timestamp = time.mktime(past_time.timetuple())
print(f"現在時刻:{now}")
print(f"過去時刻:{past_time}")
# 経過時間を計算して表示
elapsed_time = timestamp - past_timestamp
print(f"経過時間: {elapsed_time}秒")
print(f"経過時間: {elapsed_time/60}分")
print(f"経過時間: {elapsed_time/60/60}時間")
print(f"経過時間: {elapsed_time/60/60/24}日")
実行結果がこちらです。現在時刻と過去時刻の差を求めて経過時間を表示しています。
![](https://atosuko.com/wp-content/uploads/2023/05/convert-log-timestamp-string-back-to-timestamp-in-python2.jpg)
以上です。
少しでもお役に立てれば幸いです。
それでは、読んで頂きありがとうございました!