$2 ページの表示

2-2 時間を使った表示

時間の関数を使った例です。

  1: #! /usr/local/bin/ruby
  2: 
  3: nowtime = Time.now
  4: 
  5: print "Content-type: text/html\n\n"
  6: 
  7: print "<H1>現在時刻 ", nowtime.hour, "時", nowtime.min, "分", nowtime.sec, "秒です</H1>\n"
  8: print nowtime.strftime("<H1>現在時刻 %H時%M分%S秒です</H1>\n")

このプログラムは「現在時刻 13時 30分 2秒です」といった表示をします。

3行目で、現在時刻オブジェクトをつくってます。 Rubyの場合、すべてのデータがオブジェクトですので、「時刻のオブジェクト」というのを作ります。
「Time」というクラスの「now」というメソッドを使うことにより、現在時刻のオブジェクトができます。 そのオブジェクトの名前を、ここでは「nowtime」とします。

7行目は、print文を使って、HTMLを作る方法その1です。 「" "」で囲まれている部分は、そのままHTMLの文になります。 「nowtime.hour」の部分は、「現在時刻オブジェクトnowtimeの、メソッドhourを使う」という意味で、 現在時刻の時間(時分秒の時)が得られます。同様に、「nowtime.min」が分、「nowtime.sec」が秒になります。 「hour、min、sec」といったメソッドは、Timeクラスから作られたインスタンス (ここでは nowtimeオブジェクト)で使えるメソッドです。
(Rubyでは、Perlのように「""」の中に変数を埋め込むこともできます。printf文も使えます)。

8行目は、ほぼ同じ結果を出力するものです。 時間については、特に「フォーマットに従った時刻表示」というメソッドがあります。 「strftime」というのがそのメソッドで、続く「(" ")」の中に、フォーマットを書きます。 簡単に言えば、%Hが時間、%Mが分、%Sが秒を表す数字に置き換えられて出力されます。
厳密には、7行目では「0時58分4秒」となるのに対し、8行目では「00時58分04秒」になるといった違いがあります

次に、時刻によってあいさつを表示するプログラムを作ってみましょう。

  1: #! /usr/local/bin/ruby
  2: 
  3: nowtime = Time.now
  4: hour = nowtime.hour
  5: 
  6: if hour < 5 or hour > 19
  7:   aisatsu = "こんばんは!"
  8: elsif hour < 10
  9:   aisatsu = "おはようございます!"
 10: else aisatsu = "こんにちは!"
 11: end
 12: 
 13: print "Content-type: text/html\n\n"
 14: print "#{aisatsu}\n"

時刻から言葉の場合分けをする、基本的なロジック部分は、Perlの場合と同じです。 形式的には、かっこを使わなくてもできますが、条件分岐ブロック(繰り返しとかでも)の最後に「end」を書く必要があります。
4行目で、nowtime.hour の値を変数hour に入れてます(名前が長いと面倒なので)。
最後、14行目で、「" "」の中に変数を埋め込む場合は、「#{ }」で変数を囲みます。
注意:Rubyでは、大文字で始まる名前は定数になり、一般の変数(ローカル変数)名は、小文字で始まります。 しかし、上の例では「aisatsu」を「Aisatsu」としても、一旦代入されたら変更されないので、Aisatsuという定数としても問題ありません。


Next: 2-3 乱数を使った表示

Previous: 2-1 世界一簡単なCGI

Contents


Foundation of CGI Page

春風はるか haruka@harukaze.net