タイムスタンプとは何か

ある日の研修

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

UTF-8とSHIFT-JISの違いとは

はじめに

現在、見習いrubyエンジニアとして働いています。 業務中に詰まったところをアップしていきます!

初日 詰まったところ

Shift-JIS形式でのHTMLファイル作成のタスクを 振られて「??」状態でした・・・

HTMLを作成するときにmetaタグに「utf-8」を つけているな〜位しか認識していなかったので、 Shift-JIS??って感じでした汗

以下では頭の整理のためにUTF-8、Shift-JIS についてまとめていきます!

前提知識① Unicode

まず、本題に入る前に前提知識として Unicodeの話から進めていきます。

Unicodeとはえらーい人が集まって業界標準文字コード体系です。

字面だけ聞いても、なんだか「???」状態ですね。 自分なりに咀嚼すると、Unicodeは全世界の人が つかいやすいようにアルファベット、日本語、ハングル語 といった文字集合を扱う統一規格です。

つまり、全世界の人がコンピューターを用いるための 表示文字集合を統一化した訳です。 例えば、日本語のひらがなだったら「あいうえお・・・わをん」 という風に規定したわけです。

キーポイントはUnicodeはあくまでも「表示文字」だけを 規定したという事です。

前提知識② 文字符号化スキーム

但し、表示文字を規定していても、コンピューター がそのまま読める訳ではありません。 そこでどのように文字に落としこむかがポイントになります。

コンピューター→人間が読める文字(Unicode)

へのつなぎを「文字符号化スキーム」と呼びます。

本題 文字符号化スキーム UTF-8

文字符号化スキームはUTF-8UTF-16UTF-32 など色々とあるようですが、代表格は「UTF-8」のようです。 HTMLによく出てくるタグ < meta charset="utf-8" > がありますね。

これは 「utf-8形式で書いたから、ブラウザ(コンピュータ)さん、 翻訳よろしくね〜」って事です。

本題2 文字符号化スキーム② SHIFT-JIS

SHIFT-JISは日本語を表示するために 文字符号化スキームの一種です。 但し、対応する文字集合がJIS規格(日本工業規格)という 文字コード集合のために用いられています。

何故に2つの文字集合コードが混在するの???って 困惑しますね。 実はコンピューターが出来た当初、JISのように 各国で独自の文字集合ができていたようです。 で、各国が世界中の文字コード体系を一つにまとめようとして 出来たのがUnicodeとなります。

現在、インターネットで表示する文字符号化スキームは UTF-8形式が多いですが、SHIFT-JISでも表示することが出来ます。

自分でSHIFT-JIS形式で書く際は、  < meta charset="shift_jis" >と書いて、 ブラウザさんにshift-jis形式で読み込みを行うよう 指示する必要があります。