Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

眞鍋かをりさんが、女性向けSNSで「社長」に就任

2006-08-31 21:56:15 | Weblog

ここのニュース
眞鍋かをりが今度は「社長」に 女性向けSNSで
http://www.itmedia.co.jp/news/articles/0608/31/news073.html


ほー、社長。。。といっても、SNSの一番偉い人なのね(^^)
みんな社員なんでしょうか?
部長、課長はいないんでしょうか?




 などというツッコミはさておき、SNSは、やっぱしビジネスモデルは、販売と結びつけるところでしょうかねー。。

 ただ、これが進んで、一歩間違えると、マルチレベルマーケティングになってしまうわけで。。

 たとえば、マイミクの人が買うと何パーセントかキャッシュバック、マイミクのマイミクが。。。とかいいだしたら。。。

 アムウエイあたりがSNSしたら。。。(^^;)


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Javaで基本操作(その7):計算のトピックス(==とequals、instanceofの使い道)

2006-08-31 17:52:57 | JavaとWeb

 Javaで基本操作シリーズその7、今回は、今日のお題は、四則演算、計算ってことで、演算子の話、

 えー演算子には、 算術演算子(+ - * / %)、比較演算子(< > != == )、条件演算子(&& || )、シフト演算子(<< >>)、ビット演算子(& | ^ ~)、代入演算子(=)などがあり、代入演算子は算術演算子等と組み合わせたものもあり(+=など)、それらの優先順位は。。。

 なーんてはなしは、わざわざ書くまでもなく、載っています。いろんなところで。。。
 そこで、もし、興味があったらこんなとこをみるといいと思います。これだけあれば、加減乗除はできます。はい。。




 もちょっと込み入った、絶対値とか、累乗とか、logだとか、三角関数とか、極座標変換(たとえば、座標(X、Y)は、角度にすると、何度か?っていうことは、atan2でもとめる)なんかは、
クラスjava.lang.Mathに関数があります。

 maxとminについては期待しないほうが。。。
 仕様をみて、がっかりするど(^^)

 java.lang.Mathの関数はstaticなので

 なんとか=Math.関数(引数);

みたいな形で使える(newがいらない)




 で、そんな話はいいとして、ここでは、ちょっとTopics的な話題。

お題は

・==とequalsの違い(String以外で)
・instanceofの使い方
・Deepな話(boxingの==とequals)




■==とequalsの違い(String以外で)

 Stringで==とequalsの話は比較演算子のところで教わります。

 文字列の”中身”が正しいかどうかを聞くときに、==で聞いてはいけません。

 もし、==で比較すると、それは、文字列のオブジェクトが正しいか?を聞いていることになり、オブジェクトの中身である文字列が同じでも、オブジェクトは違うのでfalseになります。

 つまり、
 String a1 = new String("a");
 String a2 = new String("a");

if (a1 == a2)

 とかくと、これは、a1のオブジェクト、メモリの何番地かにとられているそのオブジェクトと、
 a2のオブジェクト、メモリの何番地かにとられているそのオブジェクトは、等しいですか?
 と聞いていることになるので、これは、falseになってしまいます。 
 (false=a1のオブジェクトとa2のオブジェクトは、コンピューターのメモリの違う番地にとられています=そのとーり)

 もし、オブジェクトの”中身の”文字列(ここでは、どちらも"a")が正しいかどうか聞きたいなら、
 if ( a1.equals(a2) )

 と聞きなさいと教わります。これは、いいんです。




 で、このことは、Stringだけみたいにおそわるけど、Integerなんかのクラスでも同じです。
 クラスそのものが同じか?と聞く場合(めったにない)は、==で、
 クラスの中身を聞くとき(ふつうこれ)は、equalsで聞きます。

 ただし、クラスではない、プリミティブな型、つまり、int,float,doubleなどは、クラスでないので、==でききます。

 つまり、intなら==,Integerならequalsで中身が一緒かわかります。
 floatdoubleなどでも、同じ話です。

 具体的にいうと
  Integer i1 = new Integer(5);
  Integer i2 = new Integer(5); // 同じ数
  vec.add(i1);
  vec.add(i2);

 のとき

 vec.elementAt(0) == vec.elementAt(1)

 はfalseを返します。オブジェクトはi1とi2で違うので。。。

 だけど、
 vec.elementAt(0).equals(vec.elementAt(1))
 はtrueを返します。中身は5で一緒なので。。。

 ここまでは、わかっていただけると思います(つづきはdeepな話へ)




■instanceofの使い方
 演算子にinstanceofがあります。これの使いみちですが、
 VectorやHashMapでいろんな型の値が入って場合

if ( vec.elementAt(0) instanceof Integer)
{
  //"Integerの処理"
}
else if ( vec.elementAt(0) instanceof Double)
{
  //"Doubleの処理"
}

などと、切り分けるのにも使います。
もっとも、
vec.elementAt(0).getClass().getName()
のように、Objectに対して、.getClass().getName()すれば、クラス名はStringで取得できるのですが。。




■Deepなお話
==とequalsの違いで、newでやったときの話をかきました。
javaの1.5には、boxingが入っています。
つまり
Vector vec2 = new Vector();

vec2.add(1);
vec2.add(1);

と、Integerにしなくて、値を直接入れても大丈夫です。

さて、このとき
vec2.elementAt(0) == vec2.elementAt(1)
と聞いたら、どうなると思いますか?
2通り考えられますよね
  trueになる
  newしたときと同じfalseになる。
結果は。。。




■ソースコード
今回のサンプルは、こんな感じ
import java.util.*;

public class test {

	/**
	 * Java1.5でのテスト
	 * @param args
	 */
	public static void main(String[] args) {
		// Mathのメソッドの例
		System.out.println("2の4乗" + Math.pow(2, 4));

		Vector vec = new Vector();
		Integer	i1 = new Integer(5);
		Integer	i2 = new Integer(5);	//	同じ数

		vec.add(i1);
		vec.add(i2);
		vec.add(i1);

		//	同じ数だが、違うオブジェクトを聞いている
		boolean b = (vec.elementAt(0) == vec.elementAt(1));
		System.out.println("=の場合:"+ b); 

		//	同じオブジェクトを聞いている
		b = (vec.elementAt(0) == vec.elementAt(2));
		System.out.println("=で同じi1の場合:"+ b); 
		
		//	同じ数で、違うオブジェクトだが、オブジェクトの値を聞いている
		b = vec.elementAt(0).equals(vec.elementAt(1));
		System.out.println("equalsの場合:"+ b); 
		
		
		//	instanceofの使い方
		if ( vec.elementAt(0) instanceof Integer)
		{
			System.out.println("Integerの処理"); 
		}
		else if ( vec.elementAt(0) instanceof Double)
		{
			System.out.println("Doubleの処理"); 
		}
		//	ちなみに。。
		System.out.println(vec.elementAt(0).getClass().getName());

		//	Deepなお話
		Vector vec2 = new Vector();
		
		vec2.add(1);
		vec2.add(1);
		b = (vec2.elementAt(0) == vec2.elementAt(1));
		System.out.println("=の場合:"+ b); 

	}

}

(上記< > ¥は、本当は半角です)




■結果
今日は、結果も載せておきましょう(一番最後が、deepな話)
2の4乗16.0
=の場合:false
=で同じi1の場合:true
equalsの場合:true
Integerの処理
java.lang.Integer
=の場合:true




  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

経理、XBRLシステム開発のための財務諸表作成業務の流れ。

2006-08-31 15:11:54 | 業務のモデル化

 最近、基本的なことを書いていたら、見る人が多くなった。
 ってことは、前にXBRLを取り上げたけど、もっと基本的な財務諸表をどうやって作るかという流れとか、そういうほうを書いたほうが、見てくれる人多いのかな?と思って、そっちを書いてみることにしました。




■まず、なにを出力するのか?から考える
 ってことが基本だと昔にブログに書いた記憶がある。

 そもそも、会計学は会社の管理資料を出す管理会計と、財務諸表などを出す会計とにわかれる。
 管理会計においては、会社の設備などの製造間接費をどういう風にプロジェクトに分けるか(製造間接費配賦)とか、プロジェクト、セグメントごとの会計とか、そーいう話題があるが、今回は管理会計の話題でないので、無視する。

 財務諸表をつくる会計は、相手先によって、まだまだ分かれる
   銀行さん=財務諸表の貸借対照表、損益計算書のほかに、計算途中の試算表も
   投資家=財務諸表、決算短信
   税務署=所得税または法人税(財務諸表相当)、消費税

 投資家にだす、つまり、上場企業が出す、財務諸表=有価証券報告書と呼ばれるものと、税務署に出す申告書は、ちと内容が違う。ただし、それは、元となる数字は同じで(同じじゃなきゃ困る。2つ帳簿があったら(>_<!))、その表現の仕方(計算手法が)違うだけである。

 決算短信は、有価証券報告書の一部の数字を抜き出したもの。
 消費税の計算は、財務諸表とは関係ないものの、やはり、これも元となる数字は同じである。




■財務諸表の内訳
ふつうは
 ・損益計算書(PL)
 ・貸借対照表(BS)
 ・キャッシュフロー計算書
 ・利益処分計算書
からなります。このほかに計算書ではないけど、リスク情報をあげる。
また、上記は単体で、グループ会社の場合、連結したものを出すけど、
利益処分計算書に関しては、連結の場合、連結剰余金計算書という。
また、連結でくっつけちゃうと、全体しかわかんないので、セグメント情報を
ながす。

 このほかに、製造業だと、製造原価報告書っていうのがあって、これも付ける場合がある。

 ただし、税金の場合は、すこし項目が、違うケースがある。
 税金の場合、法人税は、別表4、5あたりに、これらの内容を埋めるので、そこを調べればいいことになる。

 個人事業主の場合、法人税になるが、白色と青色で異なる。白色は、PL相当しかいらない。青色はBS,PL,どちらも必要。書く用紙があるので(1表と同時に添えるやつ。A3を2つ折にしたようなやつ)、その用紙に従うことになる。

 会社も個人も、一定の基準を超えると消費税を払う。これは、また違う計算になる(本則と簡易課税でも異なる)。



■業務フロー

これらの計算は、いまでは仕訳を入れるとコンピューターがしてくれる。
なんで、中は、よくわかんなくていいが、昔は、こうやっていた

1.仕訳帳に日々の取引(仕訳)を書く
   (現金)10,000 (売上)10,000
  などなど。。。

2.(大きな会社が手計算してた時代は)1日分の仕訳をまとめ仕訳日計帳に記入する
 →たぶん、今はしないんじゃあ。。(^^;)

3.総勘定元帳をつくる
 →XBRLの世界では、これがXBRL-GLになる。

4.そこから、試算表をつくる
 →TBといわれる。これは、コンピューターならすぐに作れるので、
  銀行で、これを求められることがある。合計試算表、残高試算表の2種類あり

5.決算日のところでしめて(〆て)、財務諸表をつくる
 →まず繰延(くりのべ)・見越(みこし) 処理を行います
  たとえば、12月に買ったものは、翌月払いなら、まだ払っていません。
  これらが未払いとして処理されます
 →ライブドアの総会で、この未払金の内訳は?と聞いていたやつが居たが、
  そんなの、総会の時間で答えきれるわけねーだろ(^^;)
  えーっと、文房具屋さんにいくら、電気代がいくらとか。。いうの。。。
  そーいうのは、総会じゃないところでやってくれ!
 →あと、引当金処理とかして、単体の財務諸表をつくっていきます。
 →(18:00追加)棚卸もします。
  棚卸し処理のためには、入出庫の記録が必要な場合もあります

6.税務署の申告用紙を作る場合、各項目を埋めて(計算して)いきます
 →これはいまは、会計ソフトがやってくれるので、印刷するだけです。
  たいてい毎年変わりますので、バージョンアップが必要です。
  ちなみに、個人がやる場合は別表からつくって、最後に表紙に書き込む
  という手順になります。
  くれぐれもそのとき、用紙を折り曲げたまま、書かないように。
  カーボン紙なので、不必要なところに写っちゃいますよ(^^;)

 →消費税の場合は、計算方法が違います。
  本則の場合はいいんですけど、簡易課税の場合、何類かというのが問題に
  なります。

7.大手企業の場合、単体の決算が全部出たら、連結の決算を出します
 →本支店処理といわれる処理をします。
  これは、単体の合計をあわせた後、
  アップストリーム(子会社から親会社への売り上げなど)、
  ダウンストリーム(親会社から子会社への売り上げなど)
  を消していく操作です

8.決算書をまとめ、株主総会にかけます
  上場会社は、決算書を監査を受けて、株主総会にはかり、利益処分の承認
  を得ます

9.決算短信を作ります
  東証で発表されるときは、財務諸表は、有価証券報告書とよばれますが、
  これが発表されるときに、決算短信というのをつくります。
  →東証のXBRLのページ http://www.tse.or.jp/listing/xbrl/
  にあるXBRLの見本は、決算短信の1枚目です。
  この1枚目の内容が、ロイターやブルームバーグなどですぐに報告され、
  株式相場に影響。。。されるとは限りません。
  なぜなら、株式相場終了後(3時以降)に決算報告する会社も多いからです。




■データ構造として分析するもの

 ということで、財務諸表関係で言えば、ふつうは、

  税務署に出す財務諸表や消費税関係

 それにつけくわえ、上場企業は

  東証で報告する財務諸表(連結も)や決算短信

 の構造を分析するのはもちろんですが、その入力となる仕訳、
銀行に見せる試算表、途中経過の総勘定元帳も分析しないと
いけないことになります。




■これをXBRL的にみると、

 ところが、仕訳の内容で重要なのは、勘定科目です。
 この仕訳の勘定科目にもとづいて、総勘定元帳はできます。
 そして、総勘定元帳をもとに、試算表は計算できます。

 ということは、XBRL的にみれば、

 総勘定元帳のXBRL=XBRL-GLと
 税金のためのXBRLや、
 証券市場用の財務諸表/決算短信のXBRLの

構造を調べ、XBRL-GLからそれぞれ変換できるようにして、タクソノミを決めれば、
あとは、仕訳に勘定科目、金額、日付以外になにを備考として記入するか、
税務署に提出するのに、他に必要な事項は何か(これは、申告書をみれば書いてあるはず)
を分析するといいということになります。

ひえー、長い説明でしたけど、わかりましたあ(^^;)
 



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ドコモの新しいFOMA、「HSDPAは実測でどれくらい速いのか」の記事

2006-08-31 12:13:54 | Weblog

ここの記事
本当に10倍速いのか──「N902iX HIGH-SPEED」の実力を試す
http://plusd.itmedia.co.jp/mobile/articles/0608/31/news025.html


結果は(以下斜体は上記記事より引用)

3回の計測のうち2回は1.6Mbpsを超える受信速度を記録した。送信速度は3回とも370Kbps前後と、こちらは理論限界値にかなり近く、安定していた。


で、着うたフルでも調べた結果、

平均で1Mbpsは超えている。着うたフルを1曲ダウンロードするのに20秒とかからなかった。

そうだ。

ってことで、1Mbpsは超えるそうだ。ちょっと前のT1回線の速度が1.5Mで、そのころ(2000年頃かなあ)でも、インターネットで動画とかやってたから。。。
 それほど遅いってわけじゃないよね。

 ってことで、これだけの速さが出て、フルブラウザになってくると、Webアプリで社内システムを構築して、ケータイでも見るというアプローチが、かなり多くなってくるんじゃないかな。
(いまでも、多いと思うけど。。)

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

まんが制作をフルデジタル化-共同印刷、ケータイにマンガを二次利用するには?

2006-08-30 23:53:10 | Weblog

 日本証券新聞8月31日号(30日夕方にすでに売られている)の5面に、(「パチスロメーカーが口臭測定器!?-アビリット」の下)

”まんが”制作をフルデジタル化 共同印刷 2次利用が楽に

という記事がある。そこから引用すると(以下斜体は上記記事より引用)

 共同印刷(7914)はこのほど、「まんがフルデジタル制作ライン」を構築、”まんが”制作工程の完全デジタル化により、ウェブ配信や携帯電話などへのデータの2次利用を簡単にした。


 たしかに、たしか、以前は漫画って、写研のマシンを使ってたような気が。。。
 でもフルデジタルってことは、スキャンするんじゃなくって、イラレとかで作るのかなあ??




 で、問題に思うのは、デジタル化して、たしかにWebでは見えるのはわかるんだけど、ケータイで見れるの?
 つまり、4コママンガみたいにだいたい大きさが決まっているのはいいけど、連載マンガなんかだと1コマのカットがちがって、極端な場合1ページ1コマとかあるじゃない。。
 そういうのを、ケータイ用に圧縮しちゃうと、文字の部分が見えなくなってしまう。

 じゃあ、ってんで、噴出しの部分を消して、下に文字を出す。。。としても、噴出しの部分は絵をかかれていないから、ここの部分を消したら。。。。どんな絵をだしたらいいかわかんない。
 なので、この考えもX

 ありえるのっていうと、
・噴出しの部分の文字を、マーキー(文字がぐるぐる動くやつ)にする
・噴出しの部分をクリックすると、下に大きなもじで読めるように、文字が出てくる
 ってかんじかな。どちらも噴出しの部分と文字の内容がわかんないといけない??


 

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

SNSは、利用者が多いと他のWeb2.0と同じになってしまう。なのでビジネスモデルは必要

2006-08-30 17:28:44 | Weblog

 SNSについて2つの話題を見た
mixi にも越えがたい壁が立ちはだかってきたのだろうか
http://ohnishi.livedoor.biz/archives/50237883.html


もうひとつは、
利用者を集めるのが先か、ビジネスモデルを決めるのが先か
http://blog.tokuriki.com/2006/08/post_227.html


 SNSの場合は、他のネットビジネスとちがって、特殊性があると思います。
 ちょっと考えて見ましょう。
 かりに全世界の人が、mixiに入ったとします。
 その場合、mixiは、ほかのWeb2.0サービスをやっている会社、たとえば「はてな」などと、どこが違うのでしょうか?

 ってかんがえると、SNSの場合、会員が限定されているので(招待制なので)、意義があるといえそうです。世界中の全員参加では、いみなさそうです。

 ぎゃくに1人しか参加しないとすると、どうなるでしょう。
 これも、こまります。ネットとして成立しません。




 1人では少なすぎ、世界全員では多すぎるとすると、その間のどこかに適切な人数というものがあるはずです。会社としては、そこを目指していくことになります。

 そして、その目標会員数に達したら、どうなるでしょうか?

 会員は増やせない(増やすべきでない)けど、資源は、増えていきます。皆さんブログを書けば、その分増えます。
 ということで、資源をどんどん使い、経費はかかります。

 したがって、一定会員数のときでも、どんどん資金が儲かるビジネスモデルがないと、SNSは破綻するってことになります(他のネットビジネスの場合は、利用者を増やせば切り抜けられる)。これをいつ、構築するかです。タイミングによっては、間に合わず資金がショートしてしまいます。

 なので、SNSの場合は、ビジネスモデルが早い段階で必要だと思います。




 一方、ここに指摘されている、ALEXAのmixiのトラフィック統計(リーチ)グラフ、そのブログでは、図をみて、今年の2月をピークに、急激なブレーキがかかったように、トラフィック量が伸び悩んでいるかも見える状態と分析していますが、ウィリアムのいたずらは、そうはみません。

 これは、材料待ちのグラフです。基調は、いまのところ、上に行きたがっている。

 これは、もみ合いのようにも見えますが、2006年の初めに急落したリバウンドが、高く行き過ぎてしまったので、そこと急落ラインの間で、もみ合いになってしまったものと思われます。しかし、その下値は、支持線となって、切りあがっているので、この状態では、下方とは言い切れません。
 かといって、上値も抵抗線になってしまっているので、もみ合いです。
 これを超えるには、ここで、なにか好材料がでて、それに反応しないとあがらないと思います。

 という意味でこの図からいえることは、mixiユーザーは何か新しいもの、好材料を求めてるとしかいえません。そしてそれに答えないと、たしかにグラフは(上に行かないことを確認したので、今度は下に下がって)反落すると思います。





  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Javaで基本操作(おまけ):splitによるCSVファイル読み込み

2006-08-30 15:16:03 | JavaとWeb

 JavaでCSVやタブ区切りファイルを読み込む場合、本によっては、java.io.StreamTokenizerを使ったりしてるけど、これって、数字と文字が混在する場合(住所など)は、ちと面倒になってくる。
 さっきのブログにあるようにJavaのv1.4以降であれば、splitが入ってるので、こいつを使うと、簡単に処理できます。
 つまり、

1.ファイル全体を読んできてしまう

  File f = new File(ファイル名);
  byte[] b = new byte[(int) f.length()];
  FileInputStream fi = new FileInputStream(f);
  fi.read(b);
  String s = new String(b);
  とすると、sにすべてのデータが文字列で入ってきます。

2.改行でsplitして、レコードのString配列をつくる
  String[] strrec = s.split("¥n");

3.そのString配列の1要素ごとに、タブ(あるいはカンマ)で
  きって、セルにわける(ここでは、1レコード分をVectorにいれてる)
  Vector rec = new Vector();
  for (int i = 0 ; i < strrec.length ; i ++ )
  {
    rec.add(strrec[i].split("¥t"));
  }

こんなかんじでsplitを使ったものを書いておきます
(このあと、タブ区切りファイルを使って、いろいろやりたいことがあるので)




■仕様
test.txtというファイル名で、以下の内容のファイルがあります。
9508	GASDAQ	栗原恵	13:50	7,340
9511	GASDAQ	大山加奈	13:00	43,450
9512	GASDAQ	木村沙織	13:04	59,900
9554	GASDAQ	菅山かおる	14:03	31,650


これを、以下のように、セルは:で区切り、1行ごとに改行し、
レコードの前に番目と付けます

0番目:9508:GASDAQ:栗原恵:13:50:7,340
1番目:9511:GASDAQ:大山加奈:13:00:43,450
2番目:9512:GASDAQ:木村沙織:13:04:59,900
3番目:9554:GASDAQ:菅山かおる:14:03:31,650


これを実現するため、Csvクラスにreadというメソッドを
以下の仕様で作成します

public static Vector read(String filename);
引数 filename 読み込むタブ区切りファイル
返り値 null   エラーあり
    それ以外 レコード
     Vectorの1要素が1レコードで、型はString[]



■呼び出し側ソース
そのCsv.readを呼び出すソースはこんなかんじ
import java.io.*;
import java.util.*;

public class test {
	/*
	 * 	メイン処理(呼び出し元)
	 */
	public static void main(String[] args) {
		int i,j;
		
		//	タブ区切りファイルの読み込み
		Vector rec	=	Csv.read("test.txt");
		if ( rec	==	null )
			return;

		//	内容表示			
		for(i = 0 ; i < rec.size() ; i ++ )
		{
			System.out.print(i+"番目");
			String[] cell = (String[])rec.elementAt(i);
			for(j = 0 ; j < cell.length ; j ++ )
			{
				System.out.print(":"+cell[j]);
			}
			System.out.println();
		}
				
	}
}

(上記< > ¥は、本当は半角)



■タブ区切り読み込みクラス
 実際にsplitを使って読み込むクラス(上記説明内容のもの)は、
以下のとおり
import java.io.*;
import java.util.*;

/**
 * CSV、タブ区切り読み書き
 */
public class Csv {
	public static Vector read(String filename)
	{

		//==================================//
		//				//
		//	ファイル読み込み		//
		//				//
		//==================================//
		String s = null;		//	入力文字列

		//	ファイル読み込み
		try
		{
			File f = new File(filename);
			byte[] b = new byte[(int) f.length()];
			FileInputStream fi = new FileInputStream(f);
			fi.read(b);
			s = new String(b);
		}
		catch(Exception e)
		{
			return null;
		}	
		if ( s	==	null )
		{
			return null;
		}
		
		//==================================//
		//				//
		// 文字列をVectorに入れる     //
		//				//
		//==================================//
		Vector rec = new Vector();
		if ( rec	==	null )
		{
			return null;
		}

		s = s.replaceAll("¥r","");	// ¥rがあったとき対策
		String[] strrec = s.split("¥n");
		int i;
		for (i = 0 ; i < strrec.length ; i ++ )
		{
			rec.add(strrec[i].split("¥t"));
		}

		return	rec;
	}
}

(上記< > ¥は、本当は半角)
エラー処理はまじめにやっていません(nullを返すだけ)



こんなかんじ。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Javaで基本操作(その6):文字列操作 その2(文字列操作)

2006-08-30 11:31:48 | JavaとWeb

 Javaで基本操作シリーズその6、今回は、文字列操作の2回目。実際の文字列操作になります。



■文字列の比較
 これは、よく言われるように、=でなく、equalsメソッドを使うことになります。
 もちろん、比較のcompareToを使って、0だったら、一致でもOKです。
 ちなみに、s1.compareTo("abcdefg")とやっとき、
    s1が"abcdefg"より小さければ、マイナスの値
    s1が"abcdefg"より大きければ、プラスの値
 が返ります。




■文字列操作
 文字列の操作は、Stringのメソッドで行うことになります

・1文字をcharで取り出す charAt
・バイト配列をとってくる getByte
・文字列の長さを知る   length

●文字位置を探す
・indexOf
 その文字列が含まれているところ(先頭位置)がかえる。
 文字列は、0からはじまる。(1文字目は0、3文字目は2)
 indexOf(文字列,開始点)は、開始点以降で、一致する文字列を探す

・lastIndexOf
 おわりから探すときはlastIndexOf、その場合も、返り値は先頭を0とした
先頭からの位置が返る

●部分文字列(VBAでいうMid)
・substring(開始点,終了点);
 終了点は省略可能。その場合、文字列の最後までを返す。
 ただし、VBAのMidとJavaのsubstringでは、引数の意味が違うので注意
(midは開始点と文字数、文字は1文字目は1、
 substringは開始点,終了点、文字は1文字目は0)

●置換
・replaceとreplaceFirst、replaceAll
 文字を置換するという場合、ある文字をある文字(どちらも1字)へ変えるならreplaceでOKだが、普通、置換というと、ある文字列をある文字列(1文字とは限らない)に変えることを、さしますよね。

 この場合、
  replaceAllなら、該当文字列全部、
  replaceFirstなら、該当文字が複数あったら、はじめの文字列だけ
置換します。
 ただし、replaceAllやreplaceFirstは、文字列を指定するのでなく、
正規表現指定ですので、"abc*df"だと、abc*dfという文字ではなく、
違う意味になってしまいます。なので、特殊な文字を含む場合は注意です。

●文字を切る
・split
 これは、引数の文字が現れると、そこできります(その文字は入りません)
たとえば"abcafg"で切る文字を"a"にすると
   String[0] 空文字列(1文字目の"a"の前に文字はない)
   String[1] bc
   String[2] fg
と入ります。
 カンマ区切りのようなものの場合、便利です。
 ただし、これも、正規表現なので、引数に注意です。


●正規表現のもの
 このほか、正規表現を使えるものにmatchesがあります。これは、文字列が、
その正規表現どおりになっているかを確認します。
 splitやreplaceAllも、正規表現なのですが、実際には、そこに普通に文字列
をいれて使う場合が多い気がします。

 なお、正規表現のものは、バージョン1.4から入りました。
 バージョン1.3では使えませんので注意です。

●それ以外
trim()は両端のスペースを(あれば)カットします。それ以外は、あんまり使わないと思います。まあ、Stringのjavadocをみて、使えそうなのがあれば。。。




■サンプルソース
 それらのメソッドを使ったものは、こんなかんじ
/*
 * 文字列テスト
 */
public class test {

	public static void main(String[] args) {
		String s1 = new String("abcabc");

		//	charAt,getByte
		System.out.println("3文字目:"+ s1.charAt(2));
		byte b[] = s1.getBytes();
		System.out.println("cと同じ?(なら0):"+ (b[2]-'c'));

		//比較
		System.out.println("abcdefと比較:"+ s1.compareTo("abcdefg"));
		System.out.println("文字列一致:"+ s1.compareTo("abcabc"));

		//	文字の長さ
		System.out.println("長さ:"+ s1.length());
		
		//場所を返す
		int pos1 = s1.indexOf("a");
		int pos2 = s1.indexOf("a",1); //2文字目以降
		System.out.println("aの場所:"+ pos1 + " 2文字目以降" + pos2);

		//反対から探す
		pos1 = s1.lastIndexOf("a");
		pos2 = s1.lastIndexOf("a",1); //2文字目以降
		System.out.println("aの場所:"+ pos1 + " 2文字目以降" + pos2);

		//部分文字列
		String s2 = s1.substring(1,2); // 2 文字目から 3 文字目まで
		System.out.println("部分文字列:"+ s2);

		//置換
		String s3 = s1.replace('b','c');
		System.out.println("bをcに:"+ s3);

		//==============================//
		//		正規表現	  //
		//==============================//

		//	部分にきる
		String s4[] = s1.split("a");
		System.out.println("aで、切ってみた");
		for(int i = 0 ; i < s4.length ; i ++)
		{
			System.out.println(i+"番目:"+s4[i]);
		}
		
		//	一致するか
		System.out.println("abcで書かれてる:"+s1.matches("[abc]*"));

		//	置換
		System.out.println("abをはじめだけカット:"+s1.replaceFirst("ab",""));
		System.out.println("abを全部カット:"+s1.replaceAll("ab",""));
		
	}
}

(上記< > ¥ は本当は半角)

ちなみにreplaceAll(指定文字列,"");は、指定文字列を空文字列に変換=>結果として指定文字列をカットします。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

個人のケータイで会社のWebサイトを操作する可能性

2006-08-29 23:27:14 | Weblog

スラッシュドットに
会社が買わないで従業員にPCを所有させるという考え方
http://slashdot.jp/articles/06/08/29/0758247.shtml

というのがある。個人のPCを会社の業務に使うという話。

たしかに、これは、Webベースで、サーバー側に保存させるというようにしないと、セキュリティもそうだし、インストールのとき、PCのOS,JAVA VMのバージョンがバラバラで。。とかいろいろ問題おきそうだ。。。

 じゃあ、Webアプリで会社の業務が回る場合。。。というと、微妙だ。。。

 ただし、現実は、個人のPCを会社で使っていたりもするわけなのだが。。中小だと(中小じゃなくてもそうかな。。)




 で、もっと微妙な問題になりそうなのは、ケータイだ。

 アプリの場合、iアプリだと、いろいろ環境が違うし、そもそもauのBREWの場合、機種によって差がある(オブジェクトが共通でない場合も)。なので、個人個人、いろいろ違うケータイにアプリが対応するのは、めんどっちい。なので、会社でまとめ買いってことになる。

 でもこれが
 ・連絡はケータイのメールで、
 ・アプリはQRコードやバーコード程度しか使わず、それはメールに添付する
 ・他の業務報告などは、ケータイのWebサイトで対応可能

 なケースになると、話はやっかいだ。
 具体的には、営業マンとかが、これにあたる。営業マンが、連絡にはメールを使い、日報や訪問先の報告などは、ケータイWebサイトにアクセスして入力、ほかは、パソコンを使わない(あるいは、会社に行ったときにデスクトップPCを使う)というような場合、

 もっとはっきりいおう。たとえば、介護でヘルパーさん。ケータイで業務報告をやろうと思えば可能だ。この場合PCはいらない。でも、電子化したデータは欲しい。これは、ケータイのWebサイトに、開始時、終了時にアクセスすれば可能だ。このとき、ケータイしか必要ない。




 さて、このとき、つまり、ケータイのWebサイトにアクセスするだけ、あとはケータイメールだけっていうとき、このケータイを会社が買い与えるか、持っているケータイを使ってもらうかだ。。
 ここで、考慮しないといけないのは、料金定額性になった場合だ。

 料金定額制だと、会社が買い与えた場合、毎月の料金も会社負担だ、
 ところが、個人のケータイの場合、料金定額性なら、自己負担でもいいよね!とちゃっかり会社が丸め込んでしまえば、会社は、毎月の料金を負担しなくていい。その分、従業員は電話料金負担ということになるが、定額性なら、どっちみちいつも、どっかには電話するわけで、そーすれば会社のサイトにアクセスするしない関係なしに同じお金かかるわけだから。。いっか。。ということになる。

 そーすると、会社は、大きく経費を節約できる。200人のヘルパーを抱えた場合、まいつき200人のヘルパー*仮に基本料金がたった1000円だとしても、20万の節約なのだ(@_@!)実際には、基本料金はもっと高いから、もっともっと節約なのだ(^^)
 毎月20万だとしても12ヶ月で240万、さらにさらに端末代、それらの登録の手間隙。。

 などなど考えれば、個人のケータイを使ってもらうか、会社が支給するかというのは、大きな問題なのだ。。。

 うーん、こう考えると、アプリでは無理だけど、Webベースのサイトアクセスしかしない場合、個人のケータイを使ってもらうっていうのは、ありえそう。。。っていうか、もう、そうなのかも??

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ネット防災訓練こそ、Google Map使ったほうが良かったんじゃない?

2006-08-29 18:48:59 | Weblog

ネット防災訓練の事前訓練
http://rescuenow3.cocolog-nifty.com/blog/

が終わったわけですけど。。

みにくーい(>_<!)




東京都とか、都道府県のくくりでまとめてるけど、
ひろすぎっす。。。
八王子の情報は、東京都心の人とはちとちがうし。。。

現実問題、地震でこれをやると、震源地近くは、情報がアップされないはず
(その前にインターネットのADSL等の線が切れてしまうから)
したがって、その地域の周りの情報から、この中心は、もっとひどいんだろうな
と予測する形になる。。

とすると、Google Mapかなんかで、ユーザーがもっとこまかく場所を
選んで、投稿できるようにして、

見るときは、地図を見れば、どこの投稿が多いってわかるようにして、
その地図をクリックすることで投稿が見れるって言うか、
噴出しに投稿内容を入れちゃって欲しい。

なんて、あんまり書いてると、「そんなにいうなら、お前作れよ!」っていわれ
そうなんで、この辺でやめとく。




 次回(ほんとの防災訓練)は、9月1日(金)12:00 ~ 9月2日(土)12:00で
ここのサイト
http://rescuenow.nifty.com/tokusetsu/kunren2006/index_new.htm

に詳しいことが載っている

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Javaで基本操作(その5):文字列操作 その1(String変換)

2006-08-29 14:59:49 | JavaとWeb

 Javaで基本操作シリーズその5、今回は、文字列操作の1回目。

 文字列の場合、結局java.lang.Stringで表現される、
 可変の文字を扱いたい場合は、StringBuffer。でStringBufferのappendメソッドで足していくと教わる。
 ただし、StringにStringを足しても(+)、結合したStringにはなる。良いか悪いかは別問題として、結果はそうなる。
 また、Stringにconcatメソッドがあり、これで付けたしができる。

 まあ、そんなことはさておき、文字列操作というのは、Stringのメソッドが中心となる。その前に、Stringへの変換について、書いておこう。




■数字をStringへ変換する
大きく3通り
1.valueOfする
文字列 = String.valueOf(その数字等);
  で、変換する

2.toStringする
 たしかに、toStringは、Object(すべてのトップクラス)にあるメソッドなので、これを継承している以上、かならずあるはず。

 しかし、実際には、変換するときは、
 (たとえば、intからStringなら)、
 intをIntegerにして、toStringにする、このやりかたをつかわず、

 staticのメソッドの、Integer.toString(変換したいint);のほうを使う
 (2進数toBinaryString,16進数toHexStringとかもある)

  floatでもFloat.toString(変換したいfloat);
 doubleでもDouble.toString(変換したいdouble);
 を使うのが多いと思う(あくまでも、思うって言う程度)

3.空文字をたす。
 いい方法とはされていないが

   文字列 = "" + 数字;

 でも、文字列になる。あまり良い方法ではないとされる。
 似たような形で、JavaScriptで0を足しているのがあるが、あれは、数字で計算させるために0を足すことがある。たまに、プログラムにでてくる。




■Stringを数字にする
intの場合   Integer.parseInt(文字列);
  (Integer.parseInt(16進文字列,16);だと16進と解釈して変換)
floatの場合   Float.parseFloat(文字列);
doubleの場合  Double.parseDouble(文字列);

これらは、Exceptionが発生することがある(NumberFormatException)ので
try catchの中でやる
なお、実際にやってもらうとわかるが、doubleの場合、小さい数だと誤差が出ることがある。




■サンプルソース
こんなかんじ
/*
 *  文字列テストその1
 */
public class test {
	/*
	 * 	メイン処理
	 */
	public static void main(String[] args) {
		//==================================//
		//				//
		//	Stringの付けたし		//
		//				//
		//==================================//
		StringBuffer sb = new StringBuffer();
		sb.append("ABC");		//	文字
		sb.append("de");		//	を連結する
		String s1 = sb.toString();
		System.out.println("appendによる連結:"+s1);
		
		String s2 = "ABC";
		s2 = s2.concat("def");	//	文字連結
		System.out.println("concatによる連結:"+s2);
		
		String s3 = s1 + s2;	//	足し算で連結する
		System.out.println("たじざんによる連結:"+s3);
		

		//==================================//
		//				//
		//	Stringにする	         //
		//				//
		//==================================//
		//	valueOfの例
		String	si1 =  String.valueOf(123);
		String	sf1 =  String.valueOf((float)123.234);
		String	sd1 =  String.valueOf((double)123.234);
		System.out.println("valueOf:"+ si1 + " " + sf1 + " " + sd1);
		//	toStringの例
		String sb2 = Integer.toBinaryString(16);
		String sh2 = Integer.toHexString(16);
		String si2 = Integer.toString(16,10);

		String si2_2 = Integer.toString(16);
		System.out.println("toString 16(bin):"+ sb2);
		System.out.println("toString 16(hex):"+ sh2);
		System.out.println("toString 16(10):"+ si2 + " " + si2_2);
		String sf2	= Float.toString((float)123.45);
		String sd2	= Double.toString((double)123.45);
		System.out.println("toString float :"+ sf2);
		System.out.println("toString double:"+ sd2);

		//	空文字を足す
		String si3 = "" + 123;
		System.out.println("からもじ:"+ si3);

		//==================================//
		//				//
		//	Stringを変換する		//
		//				//
		//==================================//
		try
		{
			int i1 = Integer.parseInt("1600");	// 1600
			int i2 = Integer.parseInt("10",16); // 16
			float f = Float.parseFloat("0.1");
			double d = Double.parseDouble("0.01");
			double kei = i1+i2+f+d; // 1600+16+0.1+0.01
			System.out.println("合計:"+kei);
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}		
		
	}
}

(上記の< > ¥は本当は半角)
この先、実際の文字操作については、このつぎ。。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Windows Vistaはどれだけ「遅い」か?

2006-08-29 12:20:32 | Weblog

ここのコラム
Windows Vistaはどれだけ「遅い」か?
http://www.itmedia.co.jp/news/articles/0608/29/news022.html

によると(以下斜体部は上記記事より引用)


Windows Vistaの性能は、ほとんどのハード構成では期待外れかもしれない。Vistaの基本メモリ構成は512Mバイトだが、本当に使える基本レベルは2Gバイトだろう。


ウィリアムのいたずらが、今、使っているパソコンのメモリ512Mなんだけど。。。
大丈夫かなあ。。
もう、 Vistaがでたら、買い替えなのかなあ。。。
それとも Vistaがリリースまでにスピード上げてくれるのかなあ。。

もっちょっと詳しいことが、
ここ
http://www.itmedia.co.jp/news/articles/0605/18/news066.html

に書いてあった。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

日本テレコムが社名変更、「ソフトバンクテレコム」へ。。。

2006-08-29 09:13:16 | Weblog

ここのニュース
日本テレコムが社名変更、「ソフトバンクテレコム」へ
http://www.itmedia.co.jp/enterprise/articles/0608/28/news073.html

上記サイトに会社のマークもある(けど、見なくても想像できるくらいだ。。)

社名もマークも。。。。。ださ(^^;)



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

オーマイニュース、今日、創刊日!見ました?鳥越さん、編集長でチェックしてるの?

2006-08-28 22:27:28 | Weblog

 あの、創刊前から話題だった、
 オーマイニュース
http://www.ohmynews.co.jp

みなさーん、見ましたあ??
正直、期待はずれ。。。




エンタメは、萌え系ニュースないし。。。
スポーツは野球とサッカー、ボクシング。。。女子バレーボールはあ??
 森 元首相が参戦したプロレスについても書いてないし。。。

政治経済は何々(メディア名はいる)によると。。。
って、いうのがおおいし。。
そんならYAHOOニュース見ればいいし。。

北朝鮮のニュースですらNHKによると。。。って、朝鮮の声放送のニュースからじゃないのお。。NHKなんて、みんなみれるじゃん(>_<!)
(まあ、朝鮮の声放送も、みんなきけるんだけどさあ)




さらにひどいのは、なんじゃこの文は(@_@)?

北朝鮮 ベトナムに不正資金か
そこから、そのまま、そのまま引用するよ。。。


 北朝鮮がベトナムの銀行口座に日本円にして14億円余りを預け、アメリカから要請を受けたベトナム政府が調べ始めると、口座を閉鎖したとNHK報じる。北朝鮮が不正な手段で得た資金を隠した疑い。


ごめん、初めの文、意味通じないんだけど。。。
鳥越編集長、この原稿、チェックした??

ちなみに、このニュース、KBS World(韓国の国際放送インターネット版)の、
北韓 ベトナムの口座をドイツに移転かでは、以下のように書いてある(関連箇所のみ引用)


北韓のタンチョン銀行は、ベトナム軍事商業銀行に数百万ドルとユーロを預金した口座を持っていましたが、今年7月、ベトナム中央銀行が、アメリカの要請を受けてベトナムでの北韓の不法金融取り引き調査に着手した直後に、口座をドイツなどの銀行に移したということです。


うん、こう書いてくれれば意味通じるのに。。。




 実は、これは、一番ひどそうなのを例にあげたんだけど、他はまあ、文はただしいんだけど、あんまり他のニュースと違って詳しく書いてないし、詳しい話題はブログネタにすると、炎上しちゃいそうな話がおおいし。。。うーん、これは、あんまり、ブログには使えないなあ。。。

 もっと、身近な話題とかになればいいのにな。。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Javaで基本操作(その4):日時操作(GregorianCalendarで操作、Dateを変換)

2006-08-28 16:00:35 | JavaとWeb

 Javaで基本操作シリーズその4、今回は日付、時間の表現

 これ、Date型で昔は全部できたんだけど、今、推奨しないがでる。

 GregorianCalendarで操作するのがいいみたいなんだけど、じゃあ、それに変換するには?とか、そういう話。



■はじめに-DateFormatと、それ以外の操作の必要性-

 Javaの日付操作について、もし、文字列に変換するだけなら、DateをDateFormatのformatメソッドを使って変換するだけでも、問題はない。

 こんなかんじ

import java.util.*;
import java.text.*;

public class test {
	public static void main(String[] args) {
		//	まず、フォーマット操作をしたいなら、
		//	DateFormatをもらわないといけない
		DateFormat df = DateFormat.getInstance();
		
		//	現在時刻で、Dateを生成してみましょう
		Date date = new Date();
		String StrDate1 = df.format(date);
		System.out.println("日時:" + StrDate1);

	}
}

(上記< > ¥は、本当は半角)

しかし、実際に使う場合、年、月、日等を数字で取得したい場合が多い。

このとき、java.util.Dateは、getDate()とか、推奨されてないといことになる。

 で、日付を取り出す場合、Calendar.get(取り出したいフィールド)にするわけなんだが、このCalendar(実際にはGregorianCalendar)に、どうやって持っていくか?ということが問題になってくると思う。

今回はその話。




■GregorianCalendarによる日時設定、取得、前・後の比較、日数、月数等の加減
 まず、日時操作するときはGregorianCalendarを使う。
 このGregorianCalendarはCalendarを継承している。
 つまりCalendarのset,getは使えるわけで、

 このsetとgetで、年、月、時、分、秒を取得したり、設定したりする。

 (Calendarから継承した)before,afterメソッドを使うことによって比較できる。

 年月日、時間等を足したり引いたりするには、addメソッドを使う。

 表示する場合、getでとってくれば数字になるので、そいつを表示するわけだ。




■GregorianCalendarとDateの変換
 でも、受け取るのの多くはjava.util.Dateあるいはjava.sql.Dateなわけで、そーいうとき、GregorianCalendarにするにはどうするの?っていう問題が起こる。
 まず、java.util.DateとGregorianCalendarで話を進めよう。

 GregorianCalendarのsetTimeメソッドで、Dataの値をGregorianCalendarに設定する
 getTimeメソッドでGregorianCalendarからDateの値が取れる。
 具体的には、以下のソースを見て欲しい




■サンプルソース
 そのGregorianCalendarとDateの変換は、こんなかんじ
import java.util.*;
import java.text.*;

public class test {
	public static void main(String[] args) {

		//==================================//
		//				//
	         //  GregorianCalendar=>Date	//
		//				//
		//==================================//
		// まず、2005年1月1日でGregorianCalendarを生成
		// 月は(月だけ)0から始まるので、実際の月(1)-1=0
		GregorianCalendar gc = new GregorianCalendar(2005,0,1);
		//	これをgetTimeでDateにして
		Date date = gc.getTime();
		
		//	さっきの方法で表示
		DateFormat df = DateFormat.getInstance();
		String StrDate1 = df.format(date);
		System.out.println("Dateで2005年:" + StrDate1);


		//==================================//
		//				//
		//	Date=>GregorianCalendar	//
		//				//
		//==================================//
		//	現在の時刻をdateで生成
		Date date2 = new Date();
		//  これを、さっきのgcにセットして、
                  //  現在の時間にして見ましょう
		gc.setTime(date2);
		//	1年先にしてみましょう
		gc.add(Calendar.YEAR,1);
		//	それをsetでとりだし、表示
		System.out.println("GCで2007年"+gc.get(Calendar.YEAR) 
			+"/" + (gc.get(Calendar.MONTH)+1) 
			+"/" + gc.get(Calendar.DATE));
			 		
	}
}

(上記< > ¥は、本当は半角)



■GregorianCalendarとDateのlong表現
 また、java.util.Dateも、java.sql.Dateも、時間をlongで表現でき、
どちらの場合も
getTimeで値を取得、setTimeで値を設定する

注意:GregorianCalendarのgetTime、setTimeと
   DateのgetTime、setTimeでは、受け取る/返す値が違うということだ。

 そして、GregorianCalendarも
 getTimeInMillis()で、値を受け取り、setTimeInMillisで値を取得できる

この機能を使って、java.sql.Dateを設定する



■GregorianCalendarとjava.sql.Dateの変換
java.sql.Dateでは、newするとき、longの値を必要とする
(他の方法は推奨されていない)
なので、GregorianCalendarからjava.sql.Dateは

  Date date = new Date(gc.getTimeInMillis());

でいい。

またgetTimeでlongの値を取得できることから、
java.sql.DateからGregorianCalendarは

 gc2.setTimeInMillis(date.getTime());

でOK。

 日付はsetTimeInMillisにしろ!って書いているので、あえて
触れないけど、java.util.Dateからjava.sql.Dateへの変換、
またはその逆のケースの場合、getTimeでlongの値をとり、
setTimeでその値を取得するっていう形になる。



■サンプルソース
こんなかたち
import java.util.GregorianCalendar;
import java.util.Calendar;
import java.sql.Date;
import java.text.*;

public class test {

	public static void main(String[] args) {

		//==================================//
		//				//
		//	GregorianCalendar=>Date	//
		//				//
		//==================================//
		//まず、2005年1月1日でGregorianCalendarを生成
		//月は(月だけ)0から始まるので、実際の月(1)ー1=0
		GregorianCalendar gc = new GregorianCalendar(2005,0,1);
		//	これをgetTimeInMillisでSQLのDateにして
		Date date = new Date(gc.getTimeInMillis());
		

		//==================================//
		//				//
		//	Date=>GregorianCalendar	//
		//				//
		//==================================//
		//	現在の時刻をdateで生成
		GregorianCalendar gc2 = new GregorianCalendar();

		//	これをsetTimeInMillisでセットする
		gc2.setTimeInMillis(date.getTime());

		//	1年先にしてみましょう
		gc2.add(Calendar.YEAR,1);
		//	それをsetでとりだし、表示
		System.out.println("GCで2006年"+gc2.get(Calendar.YEAR) 
			+"/" + (gc2.get(Calendar.MONTH)+1) 
			+"/" + gc2.get(Calendar.DATE));
			 		
	}
}

(上記< > ¥は、本当は半角)




■注意!
・月について
 途中でも書いたが、月は1からでなく、0からはじまっている。
 1月のmonthの値は0だ。なので、1足したり引いたりしないといけない
 のに注意

・ヘッダーのimportに注意
GregorianCalendarとjava.sql.Dateを使いたいとき
importを、

import java.util.*;
import java.sql.*;

と書いて

Date date = new Date(gc.getTimeInMillis());

としてしまうと、エラーになる。
理由は、java.utilにもDateがあるので、
Dateはjava.util.Dateのことかjava.sql.Dateのことか、分からなくなるから

と、こんなところですかね。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする