2003 -0116 ver 1.00 発行 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃.&&&& **** %%%%.  JavaScript&Javaで目指そう!基本情報技術者試験  ┃ ┃&&&&&&******%%%%%%  http://www.yscon.co.jp/j/java/jmaga/      ┃ ┃'&┃&''*┃*''%┃%'      (C)2002 斎藤末広 jmaga@yscon.co.jp  ┃ ┗━┻━━┻━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ 前回の発行部数 7573部(まぐまぐ:6326 melma!:730 Pubzine:487             ティアラオンライン:19 めろんぱん:11) ★解除・登録 :http://www2.odn.ne.jp/~egu33/jmaga/java-maga.html ★バックナンバー :http://www.yscon.co.jp/j/java/jmaga/ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓  第33号 2003/01/16  Date クラス,Calendar クラス解説 ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛  プログラムを作成する上での注意事項:  Windows98SE, SDK(JDK) 1.4.0,IE 5.5 を前提としています。  拡張子を表示するに設定してください。 ========================================================================= 交換広告(交換希望の方は,jmaga@yscon.co.jpまで) ----☆PR☆-------------------------------------------------------------- 「ネットワークのおべんきょしませんか?」 TCP/IPってなに?LANってなに?ルータってなに?というネットワーク に関することをわかりやすく解説します。シスコCCNAやドットコムマス ター、情報処理試験対策にもぴったりです! http://www.mag2.com/m/0000046467.htm --------------------------------------------------------------☆PR☆---- ----☆PR☆--------------------------------------------------------------           コンピュータ関係の資格を取りたい方へ              毎日届く,宿題メールの勉強仲間に入りませんか? .&&&& **** %%%%. &&&&&&******%%%%%% 登録: http://backno.mag2.com/reader/Back?id=0000001414 '&┃&''*┃*''%┃%' 発行元:末広ページ http://3721p.com --------------------------------------------------------------☆PR☆---- ======================================================================== ▼ オブジェクトモンスターの兄弟 オブモンブラザーズ  あけましておめでとうございます。  今年は,Jマガ,毎週火曜の週刊を目指してばりばり発行していきますね。応援 よろしくお願いします。  (と書いたにかかわらず,木曜の発行になってしまいました)  今年から,末広ページの新コンテンツとして,オブジェクトモンスターを発表 していきます。オブジェクト指向の世界に住むモンスターを2体ずつ,イラスト レータの大久保直樹さんにお願いして,描いてしてもらいます。  Jマガでは,そのモンスターにあわせて,主なクラスの使い方を順に解説して いきたいと思います。月に2本は,基本テクニック,2本は,基本クラス解説と して,しばらく,Jマガを出していくことになります。  扱ってほしい,クラス,またテクニックのリクエスト,感想をどんどんお寄せ ください。 オブモンブラザーを描いてくれる大久保直樹さんのサイトは,ここ http://www.ipc-tokai.or.jp/~okubo/ オブモンが登場するところ http://www.yscon.co.jp/j/java/obmon/index.htm ------------------------------------------------------------------------ ▼ Date クラス  Jマガですでに何度も登場している Date クラスを説明しましょう。  Date は,特定の日時を年月日だけなく,時,分,秒,さらに,ミリ秒単位で記 憶しそれを教えてくれます。  Date クラスは,JavaScript,Java ともにあります。 ------------------------------------------------------------------------ ▼ JavaScript での Date クラス  JavaScript での Date クラス利用は,Jマガの第一号ですでに登場してました。 試験までの日数を数えるプログラムに Date があります。 例 j01-02 j01-02.htm 試験日までの日数を数える ソース http://www.yscon.co.jp/j/java/jmaga/j01/j01-02.htm Hello JavaScript

 Date クラスが他にどんな仕事をするのか,次のサンプルをみてみましょう。 例 j33-01 j33-01.htm 今は,何時? ソース http://www.yscon.co.jp/j/java/jmaga/j33/j33-01.htm 1: 2: 3: 今は,何時? 4: 5: 6:

今は,何時?

7: 40:
41: 42: 43:  では,順に解説します。 9: var xtoday = new Date(); // 現在の時刻が設定される インスタンス (←生成)クラス  Date クラスから,xtoday を生成しています。xtoday は,Dateクラスの分身 であると,Jマガで説明しています。通常は,xtodayは,Date クラスのインスタ ンスという説明がされます。  Jマガのサンプルは,xtoday のように x で始まるっている名前は,みなさんが 自分で好きにつけることができる名前です。9行目に登場する,他の,var,new, Date は,x がついていません。これは,JavaScriptで決められている名前です。  new Date() と () の中になにも書かないと,現在の時刻が xtodayの中に設定 されます。 10: var xsoraNoHi = new Date(1969, 7-1, 21, 12, 56);//1969年7月21日12時56分  は,xsoraNoHi という名前の Dateクラスの分身(インスタンス)を生成しました。 覚えさせて日付は,1969年7月21日12時56分分です。  月の指定で,7月を 7-1 としているのは,JavaScriptの Dateクラスでは,月を 0 から数えおり,7月は,6 に対応しているからです。 12: document.write("  単純表示: " + xtoday +"
"); 13: document.write("地域時間表示: " + xtoday.toLocaleString() +"
"); 14: document.write("世界時間表示: " + xtoday.toUTCString() +"
"); を実行(1月15日16時44分13秒に)したとすると   単純表示: Wed Jan 15 16:44:13 UTC+0900 2003 地域時間表示: 2003年1月15日 16:44:13 世界時間表示: Wed, 15 Jan 2003 07:44:13 UTC と表示されます。  特に指定しなければ,Dateクラスとのやりとりは,日本時間です。生成も日本 時間でよかったです。  toUTCString() は,世界時間で表示してくれます。通常は,グリニッジ時間(GMT) =世界時間(UTC)と考えていいです。正確には,GMT(Greenwich Mean Time) はイ ギリスの現地時間で,UTC(Universal Coordinate Time)は,原始時計から決定し ます。うるう秒のレベルで違いがあります。たいていのコンピュータは,この違い は管理できません。 18: document.write(xtoday.getYear() + " 年 ");  xtoday.getYear()は,分身である xtoday が,getYear() という仕事をすると いうイメージです。xtoday は,自分が生成された時間を記憶していますので, そこの記憶から,getYear します。それを,document.write で表示します。 19: document.write(xtoday.getMonth()+1 + " 月 ");  getMonth() は,月を調べてくれますが,記憶している月の数字は,本当の 月より,1少ないため,+1をしています。 20: document.write(xtoday.getDate() + " 日
");  日にちは,そのままの数字が記憶されています。 22: // 曜日コードから曜日変換 23: document.write(xtoday.getDay() + " 曜日コード
"); 24: var xweek = new Array("日","月","火","水","木","金","土"); 25: var xcode = xtoday.getDay(); 26: document.write(xweek[xcode] + " 曜日
");  曜日は,Dateクラスが自動的に計算してくれます。曜日コードは,  日,月,火,... は,  0,1,2,... と対応しています。 まず,24行目で 24: var xweek = new Array("日","月","火","水","木","金","土");  で,xweek に漢字の,日,月,火,... を記憶させます。これは,配列(Array) という特別な変数を利用しています。Jマガではまだ扱っていません。別の号で扱 います。  xweek[] の [] に数字を入れることで,xweekの中身を見ることができます。 xweek[0] の中身は,"日"で,xweek[1]の中身は,"月"です。[]の中は,0 から 始まっています。 25: var xcode = xtoday.getDay(); 26: document.write(xweek[xcode] + " 曜日
");  で,漢字コード(xcode)を漢字の曜日に対応させて,表示しています。 28: document.write(xtoday.getHours() + " 時 "); 29: document.write(xtoday.getMinutes() + " 分 "); 30: document.write(xtoday.getSeconds() + " 秒
");  は,時,分,秒を表示します。getHours()と 複数形のs がついていますね。 32: document.write("ただ今は,1970年1月1日0時0分より, "); 33: document.write(xtoday.getTime() + " ミリ秒
");  Date クラスの getTime()は,グリニッジ時間での1970年1月1日0時0分からの, ミリ秒を表示します。 36: document.write("月面に第一歩(標準時間): " + xsoraNoHi.toUTCString() + "
"); 37: document.write("      (日本時間): " + xsoraNoHi + "
"); は, 月面に第一歩(標準時間): Mon, 21 Jul 1969 03:56:00 UTC       (日本時間): Mon Jul 21 12:56:00 UTC+0900 1969 と表示されます。  これは, 10: var xsoraNoHi = new Date(1969, 7-1, 21, 12, 56);//1969年7月21日12時56分  で生成した,xsoraNoHiの中身を表示しています。  では,これをほとんど同じ働きをする Java のプログラムをみてみましょう。 ------------------------------------------------------------------------ ▼ Java での Date クラス  Java にも JavaScript とおなじように Date クラスがあります。ただし,Java では,JDK 1.0 から,JDK 1.1 になったときに Date クラスの仕事が大幅に減ら され,代わりに,Calendar クラスが登場しました。  まず,JDK 1.0 レベルの Date クラスをみてみましょう。 例 j32-03 xSmpDate01.java 時刻表示 ソース http://www.yscon.co.jp/j/java/jmaga/j33/xSmpDate01.java 1: /* 2: Dateを利用した時刻表示 JDK 1.0 版 3: 注意 JDK 1.4 でコンパイルするときは 4: javac -deprecation xSmpDate01.java 5: */ 6: 7: import java.util.Date; // 日付・時刻関係 8: 9: public class xSmpDate01 { 10: 11: public static void main(String[] xargs){ 12: System.out.println("-----------------------------------------"); 13: 14: Date xday = new Date(); //現在の時刻設定 15: 16: System.out.println("現在時刻: " + xday); 17: System.out.println 18: ("ただ今は,グリニッジ標準時の1970年1月1日0時0分より,"); 19: System.out.println(xday.getTime() + " ミリ秒"); 20: 21: // 以下 JDK 1.0 の記述 22: System.out.println(xday.getYear() + 1900 + " 年 "); // 2000年対応 23: System.out.println(xday.getMonth()+ 1 + " 月 "); 24: System.out.println(xday.getDate() + " 日"); 25: 26: // 曜日コードから曜日変換 27: String[] xweek = {"日","月","火","水","木","金","土"}; 28: int xcode = xday.getDay(); 29: 30: System.out.println(xweek[xcode] + "曜日"); 31: 32: System.out.println(xday.getHours() + " 時 "); 33: System.out.println(xday.getMinutes() + " 分 "); 34: System.out.println(xday.getSeconds() + " 秒"); 35: 36: System.out.println("-----------------------------------------"); 37: // 1969年7月21日12時56分(日本時間)を設定 38: Date xgiant_leap = new Date(69, 7-1, 21, 12, 56); // 1969 を 69 39: System.out.println("月面に第一歩(日本時間): " + xgiant_leap); 40: } 41: }  JDK 1.4 の javac コンパイルするときは, javac -deprecation xSmpDate010.java  と -deprecation を指定する必要があります。これにより,過去の JDK の 機能を利用することが可能です。コンパイルとすると,「警告」のメッセージが いくつか表示されますが,これは,過去の機能を利用しているため,それを 教えてくれているだけです。 このプログラムを 2003年1月15日19時27分時点で実行すると, ----------------------------------------- 現在時刻: Wed Jan 15 19:27:27 JST 2003 ただ今は,グリニッジ標準時の1970年1月1日0時0分より, 1042626447111 ミリ秒 2003 年 1 月 15 日 水曜日 19 時 27 分 27 秒 ----------------------------------------- 月面に第一歩(日本時間): Mon Jul 21 12:56:00 JST 1969 となります。  JavaScript のプログラムとほとんど同じです。  年の設定など,西暦 2000 年対応の関係で,1900を足したり引いたりする必要 がありました。 22: System.out.println(xday.getYear() + 1900 + " 年 "); // 2000年対応 と 38: Date xgiant_leap = new Date(69, 7-1, 21, 12, 56); // 1969 を 69  がそのところです。  JavaScript の Date も Java の Dateも,new のときの設定,getHoursなど の値を調べるメソッドは,現地時間で扱いました。しかし,これは,実行する国 で違ってきます。世界対応に本格的にするには,世界時間と現地時間を明確に分 ける必要があります。そのために,JDK 1.1 から,Java では,Calendar クラス が導入されました。次のサンプルで,Calendar クラスを利用した書き直しをしま しょう。 ------------------------------------------------------------------------ ▼ Java での Calendar クラス  xSmpDate01.java と同等のプログラムを Calendar クラスを利用して作成しま す。 例 j32-03 xSmpDate01.java 時刻表示 ソース http://www.yscon.co.jp/j/java/jmaga/j33/xSmpDate01.java 1: /* 2: 時刻表示 Calendar 利用 3: */ 4: 5: import java.util.Calendar; // 現地時刻表示サポート 6: import java.util.Date; 7: 8: public class xSmpCalendar01 { 9: 10: public static void main(String[] xargs){ 11: System.out.println("-----------------------------------------"); 12: 13: Calendar xcaleng = Calendar.getInstance(); //現在の時刻設定 14: 15: System.out.println("現在時刻: " + xcaleng.getTime()); 16: 17: System.out.print(xcaleng.get(Calendar.YEAR) + " 年 "); 18: System.out.print(xcaleng.get(Calendar.MONTH)+1 + " 月 "); 19: System.out.println(xcaleng.get(Calendar.DATE) + " 日"); 20: 21: // 曜日コードから曜日変換 22: String[] xweek = {" ", "日","月","火","水","木","金","土"}; 23: int xcode = xcaleng.get(Calendar.DAY_OF_WEEK); 24: 25: System.out.println(xweek[xcode] + "曜日"); 26: 27: //午前午後判断 28: if(xcaleng.get(Calendar.AM_PM)==Calendar.AM) { 29: System.out.print("午前 "); 30: }else{ 31: System.out.print("午後 "); 32: } 33: 34: System.out.print(xcaleng.get (Calendar.HOUR)); 35: System.out.print("("+ xcaleng.get(Calendar.HOUR_OF_DAY)+ ")時 "); 36: System.out.print(xcaleng.get (Calendar.MINUTE) + " 分 "); 37: System.out.print(xcaleng.get (Calendar.SECOND) + " 秒 "); 38: System.out.println(xcaleng.get(Calendar.MILLISECOND) + " ミリ秒"); 39: System.out.println(xcaleng.get(Calendar.WEEK_OF_MONTH) + " 週/月"); 40: System.out.println(xcaleng.get(Calendar.WEEK_OF_YEAR) + " 週/年"); 41: 42: System.out.println("-----------------------------------------"); 43: 44: // 1969年7月21日12時56分(日本時間)を設定 45: xcaleng.set(1969, 7-1, 21, 12, 56); 46: System.out.println("月面に第一歩(日本時間): "+xcaleng.getTime()); 47: 48: System.out.println("-----------------------------------------"); 49: } 50: }  実行すると ----------------------------------------- 現在時刻: Wed Jan 15 19:40:37 JST 2003 2003 年 1 月 15 日 水曜日 午後 7(19)時 40 分 37 秒 208 ミリ秒 3 週/月 3 週/年 ----------------------------------------- 月面に第一歩(日本時間): Mon Jul 21 12:56:37 JST 1969 -----------------------------------------  解説します。 13: Calendar xcaleng = Calendar.getInstance(); //現在の時刻設定  Calendar クラスのインスタンス生成は,今までの書き方と違っています。通常 のインスタンスの生成は,  クラス名 インスタンス名 = new クラス名()  でした。実際,xSmpDate01.java の xday 生成のところは 14: Date xday = new Date(); //現在の時刻設定  でした。Calendar クラスは,通常のクラスではなく,抽象クラスに分類される クラスです。抽象クラスは,new では インスタンスが生成されません。このよう に特別なメソッド(getInstance())を利用します。  抽象クラスは,Jマガではまだ扱っていません。別の号で扱います。 15: System.out.println("現在時刻: " + xcaleng.getTime());  Caledar クラスのgetTime()は,DateクラスのgetTime()の1970年1月1日からの ミリ秒表示と違って,通常の日時を表示します。  Date クラスの基本は,グリニッジ時間でのミリ秒ですが,Calendar クラスの 基本は,現地時刻というのがここに現れているといえます。 現在時刻: Wed Jan 15 19:40:37 JST 2003 が,この15行目で表示をしているところです。このように日本の時間で表示さ れました。 17: System.out.print(xcaleng.get(Calendar.YEAR) + " 年 "); 18: System.out.print(xcaleng.get(Calendar.MONTH)+1 + " 月 "); 19: System.out.println(xcaleng.get(Calendar.DATE) + " 日"); に対応する,xSmpDate01.java のプログラムは, 22: System.out.println(xday.getYear() + 1900 + " 年 "); // 2000年対応 23: System.out.println(xday.getMonth()+ 1 + " 月 "); 24: System.out.println(xday.getDate() + " 日");  println() と print() は,改行をするかしないですので,無視をしてください。 大きく違うところは, Caledar クラスの場合は xcaleng.get(Calendar.YEAR) Date クラスの場合は xday.getYear() のところです。Calendar クラスは,"get(調べるところを指定)"で,Dateクラスは, "get調べるところ",となっています。Calendar クラスの方が,わかりにくいです が,()の中の要素を追加すれば,いろいろ応用ができるという構造になりました。  世界には,いろいろな暦が利用されています。それに対応するために,柔軟な Calendar クラスとなっています。 18: System.out.print(xcaleng.get(Calendar.MONTH)+1 + " 月 ");  月が,0 から数えられているところは,Dateクラスと同じです。 21: // 曜日コードから曜日変換 22: String[] xweek = {" ", "日","月","火","水","木","金","土"}; 23: int xcode = xcaleng.get(Calendar.DAY_OF_WEEK); 24: 25: System.out.println(xweek[xcode] + "曜日");  曜日コードは,日曜が,1となり,土が,7となりました。0は使われていま せん。これは,JavaScript,Java の Date クラスと違うところです。  Calendar クラスは,まだ,紹介していない機能があります。これは,また, 機会があれば,扱うことにしましょう。 ----☆PR☆--------------------------------------------------------------           コンピュータ関係の資格を取りたい方へ              毎日届く,宿題メールの勉強仲間に入りませんか? .&&&& **** %%%%. &&&&&&******%%%%%% 登録: http://backno.mag2.com/reader/Back?id=0000001414 '&┃&''*┃*''%┃%' 発行元:末広ページ http://3721p.com --------------------------------------------------------------☆PR☆---- ------------------------------------------------------------------------ ▼ 次号の予定  予告では,この号では,「スレッドを利用した簡単なゲーム」となっていまし が,説明するにはかなり複雑なため,後回しにしました。  次号は,スレッドを利用した簡単なアニメーションを扱います。 ------------------------------------------------------------------------ ▼ 著作権について  このメールマガジンで公開しているプログラムソースは,著作権を当方スタッ フが所有しますが,商用を含めて,再利用,改変,発表を制限しません。  本文に関しては,斎藤末広が著作権を所有します。再利用に関しては,承諾を 必要とします。 ------------------------------------------------------------------------ ▼アンケート(以下を返信してください)  この号のJマガに対するご意見をお待ちしています。ぜひ,ご返信下さい。 内容のレベルは 1 難しいのでもっと簡単にしてほしい 2 ちょうどよい 3 もっと難しくてもよい その他ご要望