読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

TAI64N形式の文字列をTimeに変換する関数

Ruby

ログを抽出する際にtai64nlocalするのを忘れたため、rubyで解析する羽目に。ということで、いろいろ手抜きしつつTAI64N形式の文字列をTimeに変換する関数を書きました。

  • 「@40000000」ではじまる文字列のみ解析可能。(つまり1970-1-1以前の日時は解析できません)。
  • 普通に解析すると「tai64nlocal」の解析結果となぜか10秒ずれる。
# 1970-1-1以降のtai64n形式の日時をtimeに変換する。
def tai_to_time( tai )
  raise "illegal format" unless tai =~ /\@40000000([\da-f]{8})([\da-f]{8})/
  return Time.at($1.hex-10, $2.hex/1000.0)
end

# 呼び出し例
time = tai_to_time("@4000000037c219bf2ef02e94")
puts time.strftime("%Y-%m-%d %X.") + time.usec.to_s

実行結果です。

1999-08-24 13:04:05.787492

「tai64nlocal」で解析した結果とだいたいあってますかね。

$ echo "@4000000037c219bf2ef02e94" | tai64nlocal 
1999-08-24 13:04:05.787492500


参考:
kunishi's blog - external TAI64N形式のデコード