読者です 読者をやめる 読者になる 読者になる

タイムスタンプとは何か

ある日の研修

タイムスタンプ(正確には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のコードはスッキリしてますね(^^)