LoginSignup
16
14

More than 5 years have passed since last update.

Rubyでミリ秒表記のUNIXTIMEを日付表記に変換する

Posted at

timestampがms表記となっているものを、通常の時刻表記にRubyで変換したいときのTipsです。

ミリ秒は1000ミリ秒が1秒ですので、1000で割れば求められますね。
しかし整数演算とすると、ミリ秒が落ちてしまうため、1000.0で割ります。

$ pry
[1] pry(main)> time = 1412915400300
=> 1412915400300
[2] pry(main)> Time.at(time / 1000.0)
=> 2014-10-10 13:30:00 +0900

Time.at(time / 1000.0).strftime('%Y/%m/%d %H:%M:%S.%3N')
=> "2014/10/10 13:30:00.299"

任意のフォーマットで日時を求めるには次のコードが使えます。

$ pry
[1] pry(main)> time = 1412915400300
=> 1412915400300
[2] pry(main)> Time.at(time / 1000.0).strftime('%Y/%m/%d %H:%M:%S')
=> "2014/10/10 13:30:00"
[3] pry(main)> Time.at(time / 1000.0).strftime('%Y/%m/%d %H:%M:%S.%3N')
=> "2014/10/10 13:30:00.299"

参考情報
%N: 秒の小数点以下。桁の指定がない場合は9桁 (ナノ秒)、%6N: マイクロ秒 (6桁)、%3N: ミリ秒 (3桁)

先ほどのコードでミリ秒精度でのフォーマットを指定すると.300ではなくが.299が返るため、次のコードを用いると良いでしょう。

$ pry
[1] pry(main)> time = 1412915400300
=> 1412915400300
[2] pry(main)> Time.at(time / 1000.0).instance_eval { '%s.%03d' % [strftime('%Y/%m/%d %H:%M:%S'), (usec / 1000.0).round] }
=> "2014/10/10 13:30:00.300"

ref. http://d.hatena.ne.jp/tetsuyai/20101029/1288354522

16
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
14