Javaについて質問です。Calendarクラスを継承して、「格納されている時刻をStringでもらうメソッド」を付けたいと思っています(とりあえず継承したクラスをCalendar2クラスとします)。でも、Calendar2クラスのgetInstanceメソッドは「Calendarクラスのインスタンス」を生成するみたいで、Calendar2クラスのインスタンスを作れるようにオーバーライトしたいのですが、中身がどうなってるのか良く分からないので困っています。


最初はtoStringがそうなのかなと思って使ってみたのですが、iアプリだからでしょうか、うまくいきませんでした。GregorianCalendarクラスならabstractじゃないのでこれを継承しようともしましたが、GregorianCalendarクラスも使えないみたいでした。

根本的な勉強不足があるかもしれませんが、良い方法があれば教えてください。よろしくお願いします。

回答の条件
  • 1人10回まで
  • 登録:2006/05/17 00:19:10
  • 終了:2006/05/24 00:20:12

回答(3件)

id:F57PB No.1

F57PB回答回数86ベストアンサー獲得回数02006/05/17 00:59:11

ポイント27pt

わざわざサブクラスを作らなくても、SimpleDateFormatクラスを使えば、

String date = new java.text.SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(java.util.Calendar.getInstance().getTime());

で時刻を任意形式の文字列で取得できます。

(問題はJ2MEで使えるかどうかですが。。。)

id:smelt0410

ありがとうございます。早速やってみましたが、java.textパッケージ自体が無いみたいで、SimpleDataFormatクラスの使用は無理みたいです。

2006/05/17 01:29:43
id:NOV1975 No.2

novtan回答回数50ベストアンサー獲得回数22006/05/17 00:59:41

ポイント27pt

ちょっとやりたいことと離れるかもしれませんが、一般的に時刻をStringにするときの常套手段は

Calendar cal = Calendar.getInstance();

SimpleDateFormat sdf =

 new SimpleDateFormat("yyyy/MM/dd hh:mm");

String strDate = sdf.format(cal.getTime()));

とやることが多いんじゃないでしょうか。

もし自作のCalendar2クラスを作るのであれば、普通にPublicなコンストラクタを作ってnewするのがわかりやすいですね。

id:smelt0410

ありがとうございます。「Publicなコンストラクタを作ってnewする」という所がちょっと分かりませんでした。Calendarのabstract部分を全部オーバーライトしてCalendar2をabstractでなくしてから、Calendar2 c = new Calendar2();みたいにするということでしょうか?

2006/05/17 01:37:02
id:NOV1975 No.3

novtan回答回数50ベストアンサー獲得回数22006/05/17 01:51:55

ポイント26pt

JavaのAPIドキュメントを参照してみてください。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/Calendar...

を継承した

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/Gregoria...

はCalendarクラスの抽象メソッドを全て実装しています。コンストラクタは全てpublicなので、例にある

// create a Pacific Standard Time time zone

SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids[0]);

// set up rules for daylight savings time

pdt.setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);

pdt.setEndRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);

// create a GregorianCalendar with the Pacific Daylight time zone

// and the current date and time

Calendar calendar = new GregorianCalendar(pdt);

Date trialTime = new Date();

calendar.setTime(trialTime);

というように、newで生成することが可能です。GregorianCalendarはCalendarのサブクラスですから、例ではCalendar型の変数に入れて使用していますね。

同様にして、Calendarを直接継承してCalendar2クラスを作成するのであれば、Abstract Methodを実装(使用しないなら空実装でもよいでしょう)し、コンストラクタをpublicとして作るか、getInstance()をオーバーライドしてCalendar2を返すようにすれば良いと思います。

実装の仕方についてはhttp://www.sun.com/software/communitysource/j2se/java2/download....からAPIのソースをダウンロードできますので、それを参考にすればいいと思います。

id:smelt0410

ありがとうございます!早速APIソース見てみました。最低get(int field)だけでも使えるようにしたいので、getに必要なabstractメソッドだけオーバーライトすればいいと思ったのですが、やってみると結構大変ですね。GregorianCalendarのソースをみながら、うまくやってみようと思います。

2006/05/17 03:53:59

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません