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 もっと難しくてもよい
その他ご要望