【関西の元気なSOHOが熱く語る!】
━━━━━━━━━━━━━━━━━━━━━ 2004.02.11 Vol.9xx ━━━━━
■□■□■
■□■□■ 日刊「WEBのツボ!」
□■□■□ http://www.soho-union.com/
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
配信部数 xxxx部
「続 システムはオブジェクト指向 Ruby & Flash」(#002)
福井修@Fsys.NET
【○】本日のお題 「時刻・文字列操作プログラム入門」━━━━━━━━━━
こんにちは、Fsys福井システムリサーチの福井です。
早いものでもう2月。寒さの中にも日差しには春が近づいてきたのを感じます。
Webではプログラミングは、避けて通れないでしょうから、Webプログラミングに
役に立つテーマをいろいろ取り上げて行きます。
前回「人にやさしいプログラミング言語」注1)で Javaが最近目を向けてきた『
簡単さ(=開発容易性)』は、Rubyは、既に実現しているということを話題にし
ました。今回は、時刻出力の続きと文字列操作について実例を見て行きます。
どうぞ おつきあい下さい。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ Rubyでの時刻の操作復習
────────────────────────────────────
まず前回の続きで 時刻の操作を復習しておきます。
ノートPCなどで WindowsXP を使っている環境を前提にし、お気軽にプログラム
してみましょう。
Ruby がインストール済みであればコマンドプロンプトで
> ruby -v
ruby 1.8.1 (2003-12-25) [i386-mswin32]
となるのを確認して
> ruby -e "p Time.now"
と入力しEnter を押して下さい。
Sun Feb 02 15:34:11 東京 (標準時) 2004
などと現在時刻が、応答されます。
コマンドラインへの1行の入力で、 Timeクラスの nowメソッドを実行するオブ
ジェクト指向プログラムが実行出来るのです。これは実に簡単ですね。
Rubyはスクリプト言語なので対話式でも3つの方法で実行することができます。
その1 今回示したように Rubyインタプリターに コマンドラインの引数で直接
プログラムを渡す方法
その2 前回示したように 外部ファイルにプログラムを記述し、Rubyインタプ
リターにそのファイルを指示する方法
その3 これも前回示したように 対話処理支援プログラム経由で、1行ずつRuby
インタープリターで実行してゆく方法
短いものは、その1やその3の方法で実行するのも簡単ですので良いのですが
長くなってくると、その2の方法で、プログラムソースをファイルに作成して
それを読み込んで実行させるのが普通のやり方となります。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ Javaでの日付時刻の操作
────────────────────────────────────
簡単でかつ奥深い Rubyに対して、重装備 Javaのケースも見ておきましょう。
Java開発環境のインストールは、以前にLILO Monthly Seminar 5th注2)でやった
のですがLinuxサーバが、対象であったので、最新版かつWindowsXPでのケースを
注3)に掲げておきます。
J2SDK がインストール&設定済みであればコマンドプロンプトで
> Java -version
と入力して
java version "1.4.2_03"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_03-b02)
Java HotSpot(TM) Client VM (build 1.4.2_03-b02, mixed mode)
となればOKです。
次に 現在時刻を出力するプログラムソースファイル date0.javaを作ります。
Dateオブジェクトがポイントです。
import java.util.Date;
public class date0 {
public static void main( String args ) {
Date d = new Date(); // Dateオブジェクト生成
System.out.println( d );
}
}
これをコンパイルします。
>javac date0.java
コンパイル結果エラーがないと date0.classファイルが生成されます。
この中間ファイルを Javaインタープリタで実行します。
(Javaは、コンパイルが必要かつ仮想マシン上での実行なので C++などより
本質的に遅くなります。.NETもCLRで同様)
では 実行します。
>java date0
Mon Feb 02 16:01:17 JST 2004
などと現在時刻が、応答されます。
ソースライン1行対7行。コンパイル不要対必要。
で、単純なものでも費やす時間(=コスト)に差がでてきます。
複雑なものは、単純な要素の組合せですから、複雑になるにつれその差は開いて
ゆきます。
Dateフォーマットを DateFormatクラス注4)のライブラリを使用して少し出力形
式を整形して出力文字列を見やすく出力してみます(2パターン)。
次のプログラムソースファイル date1.javaを作ります。
import java.text.DateFormat;
import java.util.Date;
public class date1 {
public static void main( String args ) {
Date d = new Date(); // Dateオブジェクト生成
// その国の通常の日付フォーマットを取得
DateFormat df = DateFormat.getDateTimeInstance();
System.out.println( df.format(d) );
// FULLパターン
df = DateFormat.getDateTimeInstance
(DateFormat.FULL, DateFormat.FULL, Locale.JAPAN);
System.out.println( df.format(d) );
}
}
コンパイルし、実行します。
2004/02/02 17:08:12
2004年2月2日 (月曜日) 17時08分12秒 JST
こちらの方が見やすいですね。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ Rubyでの日付時刻の整形
────────────────────────────────────
では Rubyでの日付時刻の出力文字列整形を見てみましょう。
オブジェクトには、機能が内蔵されています。オブジェクトの機能を呼び出す
のがメソッドです。
Timeオブジェクトの各種メソッドを使うのが、ポイントです。Timeオブジェク
トでは、演算も自在です。
整形には、strftimeメソッド注5)を使うのがまあ便利です。
p Time.now.strftime("%y/%m/%d %H:%M:%S")
これで
2004/02/02 17:08:12
のフォーマットは OK です。
が
p Time.now.strftime("%Y年%m月%d日 %H時%M分%S秒")
こちらは strftime の制約で、うまくゆきません^^;; 地道に2つをまとめて
t = Time.now # 現在時刻のTimeオブジェクト
n = ['日','月','火','水','木','金','土'] # 曜日の配列
puts t.strftime("%Y/%m/%d %H:%M:%S") # 行末で改行
print t.year,'年',t.mon,'月',t.day,'日(',n[t.wday],'曜日) ' # 改行なし
print t.hour,'時',t.min,'分',t.sec,'秒 JST'
配列もでてきますし、改行コードの有無の使い分けなども出てきて段々プログラ
ムらしくなってきます。
これを プログラムソースファイル date1.rb に作成します。
> ruby date1.rb
で実行します。
2004/02/02 19:45:09
2004年2月2日(月曜日) 19時45分9秒
曜日やJSTを出力しないという応用例もすぐですよね。
Java で 曜日や JST を出さないようにするには、いろいろハマリます :-p
またマイクロ秒も出力できるので、プログラムの前後で時刻を出力すると実行時
間も測定できます。
t = Time.now
print t.strftime("%Y/%m/%d %H:%M:%S."),t.usec
事実上はmsecまでの精度ですが。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ JavaScriptでの日付時刻の整形
────────────────────────────────────
Webのツボなのでブラウザで動作するJavaScriptの例も少し。
なお行末の ; は、冗長なので積極的に除いています。
Dateオブジェクトが、ポイントです。
これを HTML文 date1.htm に作成します。
なおタグを大文字で書くか小文字で書くかで、ポリシーがあります。
XHTMLでは、「XHTML文書は、すべてのHTML要素名及び属性名に小文字を使わなけ
ればならない。」注6)のでタグは、日頃から小文字で書くようにしています。
HTML4 の仕様書注7)では
「要素名は大文字小文字を区別しません(case-insensitive)」
ので大文字で書く慣用もあります。
この date1.htmを ブラウザで直読みするとブラウザ上でJavaScriptが実行され
画面に時刻文字列が出力されます。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ ActionScriptでの日付時刻の整形
────────────────────────────────────
Flash ActionScriptの場合も見ておきましょう。
Dateオブジェクトが、ポイントとなるのはJavaScriptと当然同じです。
まあ ほとんど同じといえば同じです。ActionScriptはJavaScriptの標準規格
ECMA Scriptの拡張実装なのですから。またまだFlash2004(ActionScript2)はさ
わっていないのでFlashMXを対象にしています。
なおここでも行末の ; は、冗長なので積極的に除いています。
基本準備は他書などを見ていただくとして、ここではスクリプトの実体部のみ。
sout,lout が MovieClip上の出力文字列です。
t = new Date()
n = "日月火水木金土"
y = t.getFullYear()
mo = t.getMonth()+1
d = t.getDate()
dn = t.getDay()
td = n.charAt(dn)
h = t.getHours()
mi = t.getMinutes()
s = t.getSeconds()
sout = y+"/"+mo+"/"+d+" "+h+":"+mi+":"+s
lout = y+"年"+mo+"月"+d+"日("+td+"曜日) "+h+"時"+mi+"分"+s+"秒")
これを ActionScript外部ソース date1.as に作成します。
1フレーム目のフレームスクリプトで
#include "date1.as"
で、ソースを読み込ませます。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ まとめ
────────────────────────────────────
日付時刻の取扱は、奥深いですし、避けて通れません。今回はほんのさわりを
眺めてみましたが、『簡単さ』というのは、実現するには、舞台裏は、奥深い
のです。作りやすさは、良いモノをつくる動機・必要条件になるでしょう。
では 次回からサーバサイドプログラミングに入ります。お楽しみに
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
※ 注釈、資料、参考情報
────────────────────────────────────
注1) 続システムはオブジェクト指向 Ruby & Flash」(#001)
「人にやさしいプログラミング言語」
http://www.melma.com/mag/02/m00020302/a00000690.html
注2)LILO Monthly Seminar 5th
http://lilo.linux.or.jp/event/lms/200101/
http://aks.dyndns.org/lms/lms0101.html#p2
注3) J2SDKインストール&設定
1.ダウンロード
http://java.sun.com/j2se/1.4.2/ja/download.html
より最新版2004/2/2現在 1.4.2_03 J2SDK Win32版
j2sdk-1_4_2_03-windows-i586-p.exe 49MB をダウンロードします。
2.インストール
ダウンロードしたj2sdk-1_4_2_03-windows-i586-p.exe をダブルクリック
し、インストーラーの指示に従います。
Defaultのインストール先は c:\j2sdk1.4.2_03 となります。
注4) java.textクラス DateFormat
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/text/DateFormat.html
注5) Ruby 時刻オブジェクト
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Time
注6) XHTML 1.0: 拡張可能ハイパーテキストマークアップ言語
http://www.doraneko.org/xml/xhtml10/REC000126.html
注7) HTML4.0 Specification(jp)
http://www.asahi-net.or.jp/~bd9y-ktu/html4rec_f/cover.html
【プロフィール&近況】
事務所を引っ越すことになりまして、場所選びや、家具選びなどにも時間をと
られてバタバタしています。
どなたか良い看板屋さんをご存じでしたら是非紹介してください^^
福井 修 ( FUKUI Osamu )o-fukui@po.iijnet.or.jp
福井システムリサーチ http://fsys.net/ 主幹。システム構築歴27年。
システム構築エキスパート
日本Linux協会、神戸商工会議所、情報処理学会、関西IT共同体 会員
関西ソーホ・デジタルコンテンツ事業協同組合員
デジタルハリウッド神戸校 Java講師