タイムスタンプとは何か
ある日の研修
タイムスタンプ(正確にはUNIXタイムスタンプ) を使う機会がありました。
これは「1970年1月1日」UTC時点からの経過秒数(整数型) を示すものだそうです。
恥ずかしながら初めて聞く単語だったので、 まとめておきます。
使用方法
以下ではRubyを用いてタイムスタンプを使用してみます。 現時刻から変換するには以下の通りとなります。
例1 タイムスタンプ使用
print Time.now #出力→2016-09-12 22:58:48 +0900 print "\n" #改行 print Time.now.to_i #出力→1473688728 #1970年1月1日からの経過秒数 print "\n" #改行
上記のTime.nowは Time型 を表しています。 Time型→タイムスタンプの変換は .to_iをつけるだけです。 また、タイムスタンプは 整数型 を表しています。
用途
こんなことやって何か意味あるの??って思う人も いるかもしれません。 少なくとも私は思ってました。
ですが、前述したようにタイムスタンプは整数型なので、 時間帯を比較する際には簡潔にコードを書くことができ、 非常に有効です。
次項では、 「入力した日付が現時刻と比較して過去ではないか検証する」 コードを例に説明を行います。
コード例
例2 現時刻と入力値比較
require 'time' print "予約日を入力して下さい\n例)2016年10月22日\n" enter_time = ((gets.chomp).split(/[年,月,日]/)).join("-") if enter_time if Time.parse(enter_time).to_i >= Time.now.to_i print Time.parse(enter_time).to_i else print "今日の日付より過去です\nもう一度入力して下さい。\n" end end
コードが長くなったので順を追って噛み砕いて説明します。
1行目
require 'time'
→組み込みではないtime ライブラリを 用いることによりありがたーい機能(後述します)が使えます。
2-3行目
print "予約日を入力して下さい\n例)2016年10月22日\n" enter_time = ((gets.chomp).split(/[年,月,日]/)).join("-")
→予約日入力メッセージを出力し、 「2016年10月23日」といった風に入力すると、 「2016-10-23」と変換されるようにしています。
残り
if enter_time #入力を受け取る if Time.parse(enter_time).to_i >= Time.now.to_i #比較 print "予約承りました" else print "今日の日付より過去です\nもう一度入力して下さい。\n" end end
→Time.parseはtimeライブラリの機能です。timeライブラリは
組み込みで入っていないので、require time
をする必要があります。
この機能により、色々な表現(2016-10-22や2016/10/22)
をTime型に変換してくれます。
そしてto_iをつけてやると現時刻との比較が簡単に
行なえますね。
※補足 タイムスタンプ型→Time型への変換はTime.atを使います。
まとめ
タイムスタンプを用いないと例2は場合分けが多くなります。 (私の力では・・・)
一方、例2のコードはスッキリしてますね(^^)