SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

作って覚えるJavaプログラミングのススメ

Java入門 (9) - タイマーとスレッド

作って覚えるJavaプログラミングのススメ 第9回

時刻の表示について

 時刻とそのフォーマットについて簡単に説明しておきましょう。前述のサンプルでは、現在の日時の値を取得してから、フォーマットを指定して文字列に変換し、画面に表示しています。

Calenderインスタンスの取得

 一般的に、日付の取得にはカレンダーに従って日時を表すCalendarクラスを利用します。Javaでは、日時の値というのはDateクラスというものを使って表現されるようになっています。CalendarはこのDateを内部に持って、特定のカレンダーに従って日時の値を管理するクラスです。Calendarクラスのインスタンス取得を行う際は、newによる生成ではなく、getInstanceメソッドを利用します。

Calenderクラスのインスタンス取得方法
[変数] = Calendar.getInstance( [Locale] );

 getInstanceメソッドの引数には、時刻を取得したい地域を示すLocaleインスタンスを指定することができます。日本の時刻を取得したい場合は、引数にLocale.JAPANを指定します。ちょうどサンプルコードでは日本を指定していますね。Localeインスタンスの指定は省略することも可能です。

 Calendarクラスに類似するものとして、グレゴリオ暦のカレンダーで日時を表現するためのGregorianCalendarクラスがあります。GregorianCalendarCalendarのサブクラスで、一般的な西暦日時を扱いたい場合に利用します。興味ある方は調べてみるとよいでしょう。

日時情報のフォーマット

 さて、Calendarインスタンスから時刻を取得する際はDateFormatクラスを利用します。DateFormatは、Date型の引数を受け取り、指定のフォーマットに整形した文字列を返してくれるクラスです。引数に渡すDateオブジェクトは、CalendargetTimeメソッドというものを使って得ることができます。

 ただし、このDateFormatは、「抽象クラス」と呼ばれる特殊なクラス(直接、インスタンスを作ったりできない特別なクラス)として定義されており、このクラスを直接利用できないようになっています。一般的にはDateFormatクラスを継承したSimpleDateFormatというクラスを利用するのが基本と考えてよいでしょう。

 SimpleDateFormatクラスはインスタンス生成時に、取得したいフォーマットをString型で引数に指定します。TimeLabelクラスのコンストラクタを見るとこんな行が書かれていますね。

SimpleDateFormatインスタンス生成
format = new SimpleDateFormat("HH:mm:ss");

 ここでは、日時の値をHH:mm:ss形式で表すためのインスタンスを生成しています。引数で指定している記号はそれぞれ次のような意味を示します。サンプルコードのように記号を2つ並べると、対応する日時の要素が2桁で表示されます。

フォーマット指定時に使う記号
記号意味
H24時間表記による時の値
m分の値
s秒の値

 Calendarインスタンスの取得から、SimpleDateFormatインスタンスを使って所定のフォーマットで現在時刻を取得するまでの流れを整理すると次のようになります。

Calendarインスタンスの取得からフォーマット済み時刻の取得まで
Calendar calendar = Calendar.getInstance(Locale.JAPAN);
this.setText(format.format(calendar.getTime()));

 これはちょうどTimeLabelクラスのsetTimeメソッドで行っている処理にあたります。まず、Calendarインスタンスを取得した後、現在の時刻をsetTextで表示しています。この部分を分解してみると、次のようになります。

  • calendar.getTime()
  • CalendarからDateインスタンスを得る。
  • format.format( [Date] )
  • SimpleDateFormatインスタンスに指定された形式で、引数Dateの日時をフォーマットしたStringとして返す。

 CalendarからDateインスタンスを取り出し、これを使ってSimpleDateFormatformatメソッドで指定した形式の文字列を取り出していたのです。

タイマーの利用手順

 では、本題であるタイマーを利用している部分について見てみましょう。サンプルコードでは、TimeLabelクラスのコンストラクタでタイマーに関する設定を行っています。

コンストラクタでのタイマーの設定
Timer t = new Timer();
t.schedule(new TimerLabelTask(), 0,1000);

 まずnew TimerTimerクラスのインスタンスを作成します。次にscheduleメソッドを使って、処理の実行スケジュールを設定します。メソッドの引数には、実行するタスク(ここではTimerTaskクラスを継承して作成したTimerLabelTaskインスタンス)、遅延時間、実行間隔を指定します。

 遅延時間と実行間隔は、それぞれ「ミリ秒(1000分の1秒)」単位の数値で指定します。遅延時間が経過後、実行間隔で指定した時間が経過する度にTimerLabelTaskの処理が実行されます。

 処理内容を記載した肝心のTimerLabelTaskクラスは、次のように定義されています。

TimerLabelTaskクラスの設定
class TimerLabelTask extends TimerTask {
    
    public void run(){
        setTime();
    }
}

 Timerで実行する処理は、サンプルのようにTimerTaskクラスを継承して作成します。TimerTaskのサブクラスには、runというメソッドを用意する必要があります。runメソッドには実行する処理を記述しておきます。

 TimerTimerTask、2つのクラスを使うのでちょっと面倒な気がしますが、実際にやってみるとそう複雑なものではありません。

次のページ
もう1つのタイマー

この記事は参考になりましたか?

作って覚えるJavaプログラミングのススメ連載記事一覧

もっと読む

この記事の著者

掌田 津耶乃(ショウダ ツヤノ)

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2597 2008/06/24 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー