人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

●質問者: smelt0410
●カテゴリ:コンピュータ
✍キーワード:Abstract iアプリ Java String インスタンス
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● F57PB
●27ポイント

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

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

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

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

◎質問者からの返答

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


2 ● novtan
●27ポイント

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

Calendar cal = Calendar.getInstance();

SimpleDateFormat sdf =

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

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

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

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

◎質問者からの返答

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


3 ● novtan
●26ポイント

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のソースをダウンロードできますので、それを参考にすればいいと思います。

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ