前回の第7回は,Dateクラスを使って日付を調べ,アナログ時計のTextFieldに表示させた。今回は,Stringクラスにより文字列を操作して,日付のフォーマットに手を加え,その処理を関数としてまとめてみたい。
Stringクラスを使った文字列の一部取出し
第7回のアナログ時計に表示した日付は,年月日の数字にスラッシュ(/)を挟んで,単純に連結したものだった(図1)。これを数字2桁に揃えた「YY/MM/DD」というフォーマットにしてみよう。まずは,年の値だ。
文字列の操作には,Stringクラスが利用できる。Stringクラスも,Dateクラスと同じように,インスタンスをターゲットにして,プロパティやメソッドを操作する。しかし,new演算子でインスタンスを作成しなくても,ダブルクォーテーション(")で括って記述した文字列は,そのままStringクラスのインスタンスとして扱える(※1)。
- ※1)
- new演算子を使って,以下のようにStringインスタンスを作成することも可能だ。しかし,このような記述を用いる必要性は,とくにない。
var year_str:String = new String("2007");
たとえば,文字列の文字数はString.lengthプロパティで調べることができる(※2)。つぎのスクリプトは,文字列の数字"2007"を変数year_strに格納し,その文字数4を[出力]パネルに表示する。
var year_str:String = "2007";
trace(year_str.length); // 出力: 4
- ※2)
- Stringクラスのlengthプロパティを,ヘルプなどのドキュメントではString.lenghtのように「クラス名.プロパティ名」のかたちで示す。また,メソッドも同様に「クラス名.メソッド名」のように記載する。
文字列から文字の一部を取出すには,String.substring()メソッドを用いる。引数は文字位置を指定するインデックス番号で,開始位置と終了位置のふたつだ。なお,インデックス番号は,0から始まる。たとえば,文字列の数字"2007"から末尾の2桁"07"を取出すには,つぎのようにString.substring()メソッドの第1引数に2,第2引数に4を指定する。
var year_str:String = "2007";
trace(year_str.substring(2, 4)); // 出力: 07
文字列のインデックス番号は0から始めるので,第1引数の2は(3文字目なので)よいとして,第2引数の4がわかりにくいかと思う。これはヘルプを見ると,第2引数は「抽出するサブストリングの最後の文字のインデックスに1を加えた整数」とされているからである。
文字そのものを数えるより,文字の間に仕切を想い浮かべると理解しやすいだろう(図2)。そして,取出したい文字列が,どの仕切からどの仕切の間にあるのかを数えればよい。文字列"2007"の末尾の2桁"07"は,仕切番号2から4の間の文字ということになる。
すると,ターゲットとなる文字列の,ある文字から最後の文字まで取出したいとき,第2引数はString.lengthプロパティの値と一致することがわかる。したがって,上記スクリプトでString.substring()メソッドメソッドの第2引数を書替えて,year_str.substring(2, year_str.length)と記述しても同じ結果が得られる。
さらにヘルプを確認すると,第2「パラメータを省略すると,String.lengthが使用され」るとある。つまり,文字列の末尾2桁を取得したい場合には,第2引数は省略できる。前回作成したスクリプト2に修正を加えて(※3),年を2桁で表示するようにしてみよう(スクリプト1)。
スクリプト1 年の下2桁を取出して日付表示する
function xSetTime(eventObject:Event):void {
// [1]Dateインスタンスから時刻と日付のプロパティ値を取得する
var my_date:Date = new Date();
var nSeconds:Number = my_date.seconds;
var nMinutes:Number = my_date.minutes;
var nHours:Number = my_date.hours;
var nYear:Number = my_date.fullYear;
var nMonth:Number = my_date.month+1;
var nDate:Number = my_date.date;
// [2]時計の針のアニメーション
second_mc.rotation = nSeconds*6;
minute_mc.rotation = nMinutes*6;
hour_mc.rotation = nHours*30+nMinutes/2;
// [3]日付のフォーマットを設定
var year_str:String = String(nYear).substring(2); // 第2引数を省略
// [4]日付をTextFieldインスタンスに設定
my_txt.text = year_str+"/"+String(nMonth)+"/"+String(nDate);
}
addEventListener(Event.ENTER_FRAME, xSetTime);
- ※3)
- 前回作成したサンプルファイルは,第7回「Dateクラスの日付と文字列の操作」の2ページ目からダウンロードできる。
[ムービープレビュー]を確かめると,日付の年は下2桁が表示される(図3)。



