SHOEISHA iD

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

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

特集記事

Java入門 (10) - さまざまな値とフォーマット

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


  • このエントリーをはてなブックマークに追加

今回は、Javaでよく使われる値の表現について考えてみましょう。日時の値の基本的な扱い方や、テキスト・数字などをフォーマットする方法などについて説明していきます。

  • このエントリーをはてなブックマークに追加

はじめに

 プログラムの世界では、さまざまな「値」を使います。ここでは、値の扱い方について少し掘り下げていくことにしましょう。

 まずは、日時の値について。これは意外と重要ですが、慣れない内は使い方がよく分からないものです。そして、普段使っているテキストや数字の値を、さまざまにフォーマットして利用する方法について。これも、例えば「1000 という数字を \1,000 と表示する」というように、値のフォーマットは意外と多用されるものです。こうした、値をいろいろと活用していくための知識についても考えていくことにしましょう。

対象読者

  • Javaに興味はある、けれどプログラミング経験がない、という人。
  • Javaに興味はある、けれど何から手をつければいいか分からない、という人。
  • Javaに興味はない、でも何でもいいからプログラミングをしたい、という人。

日時はカレンダーで管理するのが基本

 日時に関する値というのは、実用的なプログラムを作ろうとすると、テキストや数字並みに重要な値となります。が、意外に初心者のうちは使い方を知らないものです。日時の値は、Javaではちょっとばかり複雑です。

 前回、スレッドの説明のところで、Calendarというものを使って現在の日時を表示する方法についてざっと説明しましたが覚えているでしょうか。Calendarは、カレンダーのためのクラスですが、実をいえばJavaには、もっとシンプルな日時のためのクラスがあります。

 Javaでは、日時はjava.utilパッケージにあるDateというクラスとして用意されています。これは、new Dateとするだけで簡単にインスタンスを作成できます。新規にインスタンスを作成すると、その時点での日時を示すDateインスタンスが作成されます。また、年月日の値を引数に指定して、特定の日付を示すDateを作成することもできます(※ただし、これは現在は使いません。詳しくは後述します)。

 実際に、Dateを利用する簡単なサンプルを動かしてみましょう。

package codezine.java;

import java.util.Date;

public class Sample {
    private static final long serialVersionUID = 1L;

    public static void main(String args[]) {
        Date date = new Date();
        System.out.println(date);
        Date date2 = new Date(2001,1,1);
        System.out.println(date2);
    }

}
実行すると、現在の日時と、2001年2月1日の日時が表示される。
実行すると、現在の日時と、2001年2月1日の日時が表示される。

 ここでは、new Date()で現在の日時を、new Date(2001,1,1)で2001年2月1日の日時を、それぞれDateインスタンスとして作成し、それぞれprintlnで出力しています。単純に日時の値を作ってそのまま出力するだけなら、非常に簡単なことが分かりますね。

Calendarの利用

 実際、先ほどのサンプルを自分で試してみたとき、「The constructor Date(int,int,in) is deprecated」といった警告が現れた人も多いはずです。これは、年月日を引数に指定したnew Dateは「非推奨(使うべきではない)」となっているためです。要するに、このやり方は「今は使っちゃダメ!」なのです。

 日時を扱うとき、Dateクラスだけを利用して処理するやり方は、今ではほとんど用いられません。Dateクラスは、日時を扱うための最低限の情報しか管理できず、機能的に見ると非常に貧弱なのです。

 現実世界では、日時は「暦のシステム」と密接な関係にあります。例えば、「今日は何日?」といった場合、ほとんどの人は西暦や和暦といった暦を使います。暦が違えば、表現される日付も変わってきます。「今日は何日?」と聞かれたとき、「2008年の○月×日」と答える人もいれば、「平成20年の○月×日」と答える人もいるでしょう。または単に「○月×日」と答えるかもしれません。どちらが正しくてどちらが間違っているわけでもありませんね。ただ使っている暦が違うというだけです。平成20年の「今」という時間はどこの世界でも同じであったとしても、それをどう表現するかは、暦によって大きく異なってくるのです。

 そこで、Javaでは「暦」のためのクラスを用意し、これを使って日時を表現するように強化されました。これが、java.utilパッケージのCalendarクラスです。前回登場したクラスです。

 これは、暦(カレンダー)の最も基本となるクラスです。一般に、暦というのは西暦(現在のグレゴリオ暦と呼ばれるもの)を使いますが、これはCalendarを継承して作られているGregorianCalendarというクラスとして用意されています。私たちが普段使っている「西暦」を使う場合は、このGregorianCalendarを利用することができます。このクラスは、次のような形でnewすることができます。

new GregorianCalendar();
new GregorianCalendar( 年 , 月 , 日 );
new GregorianCalendar( 年 , 月 , 日 , 時 , 分 );
new GregorianCalendar( 年 , 月 , 日 , 時 , 分 , 秒 );

 先のDateと同様に、引数がない場合、現時点の日時を表すGregorianCalendarインスタンスが作成されます。引数を指定した場合、指定された日時のGregorianCalendarインスタンスとなります。

会員登録無料すると、続きをお読みいただけます

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

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

メールバックナンバー

次のページ
日時の要素を取り出す

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

  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2795 2008/07/30 09:30

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング