JavaA2Z

KAB-studio > プログラミング > JavaA2Z > Calendarとは

Calendar

日本語 カレンダー
英語 calendar
ふりがな かれんだー
フリガナ カレンダー

解説

J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名java.util.Calendar。
日時を格納するためのクラス。日時を格納し、基本的な処理がひととおりえるメソッドを持つ。
 
コンストラクタprotectedのため直接呼び出すことはできない。getInstance()メソッドstaticメソッドとして用意されており、このメソッドを呼ぶことでCalendarクラスインスタンスを作成できる。また、このインスタンスには現在日時が格納されている。

ただし、正確に言うと「Calendarクラスインスタンス」ではなく「Calendarクラスサブクラスインスタンス」である。詳しくは「GregorianCalendar」の項目を参照
 
特定日時のセットにはset()メソッドを使用する。あらかじめclear()メソッド呼び出しておくとエポックつまり「1970/01/01 00:00:00.000」にリセットしてくれるため、その後に希望の日時をセットするといいだろう。
年、月、日等を個別に取得する場合にはget()メソッドを使用する。
いずれも、項目を指定する場合には「Calendar.YEAR」等のstatic finalフィールドを用いる。
また、月は-1された値となることに注意。これはプログラミングにおける慣習のようなもので、1月が0、12月が11となる。月を指定する際は、「Calendar.JANUARY」等のstatic finalフィールドが用意されているためこれらの使用を勧める。
 
Calendarクラスの日時は「年、月、日、時、分、秒、ミリ秒」と7つの整数値によって表現されている。そして、これらは相関関係を持つ。「秒」が59の場合に1を加えれば、0になると同時に「分」に1が加わる。また、日時の比較をう場合、この7つすべての比較をわなければならない。
こういった「日時の処理」は非常にバグを生みやすいため、add()メソッドやbefore()メソッド、after()メソッドの使用を強く勧める。
add()メソッドは「年、月、日、時、分、秒、ミリ秒」のいずれかを任意の量だけ増減できる。繰り上がり及び繰り下がりを計算してくれるため大変便利である。
before()メソッドおよびafter()メソッドは、他の「Calendarクラスインスタンス」との比較をう。「A.before( B )」は「A < B」、「A.after( B )」は「A > B」という比較をう。

また大小の比較をう場合にはcompareTo()メソッドを使用する。こちらは「compareTo」の項目を参照
 
内部的には「1970/01/01 00:00:00.000」つまり「エポック」からのミリ秒という形式で日時を格納している。詳しくは「エポック」の項目を参照
エポックからのミリ秒はgetTimeInMillis()メソッドで取得できる。
 
出力にはSimpleDateFormatクラスが向いているのでこのクラスを使用した方がよいだろう。
詳しくは「SimpleDateFormat」の項目を参照
 
同じく日時を格納するクラスとしてDateクラスが存在するが、Dateクラスは現在「推奨されていない」ため、Calendarクラスを使用する方がよい。
Dateクラスとの相互変換の方法は「Date」の項目を参照
 
ちなみに「Calender」ではなく「Calendar」なので注意。

参考サイト


(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
import java.util.Date;
import java.util.Calendar;
import java.text.SimpleDateFormat;

public class Sample
{
    public static void main( String[] args )
    {
        // 出力フォーマット。
        // 「年/月/日 時:分:秒.ミリ秒」と出力します。
        String format = "yyyy/MM/dd HH:mm:ss.SSS";

        // 現在日時を格納したCalendarクラスのインスタンスを取得します。
        Calendar now = Calendar.getInstance();
        // Dateクラスへの変換はgetTime() メソッドを使用します。
        Date output = now.getTime();
        // 出力します。
        System.out.println( new SimpleDateFormat( format ).format( output ) );
        // 2010/03/04 16:33:26.421
        // ……当然、実行時の日時によって出力結果は変わります。

        // 任意の日時を指定する場合、あらかじめclear()メソッドで
        // リセットしておくといいでしょう。
        Calendar oneZero = Calendar.getInstance();
        oneZero.clear();
        System.out.println( new SimpleDateFormat( format ).format( oneZero.getTime() ) );
        // 1970/01/01 00:00:00.000

        // 年月日のセットはset()メソッドで行います。
        // 2001年1月1日 0時0分0秒にセットします。
        oneZero.set( 2001, 0, 1, 0, 0, 0 );
        System.out.println( new SimpleDateFormat( format ).format( oneZero.getTime() ) );
        // 2001/01/01 00:00:00.000
        // 月に0を渡していることに注意してください。
        // 月は0から始まります。1月が0、12月が11です。
        // わかりやすくするために、専用のフィールドを使った方が
        // いいでしょう。以下がその例です。
        oneZero.set( 2001, Calendar.JANUARY, 1, 0, 0, 0 );
        System.out.println( new SimpleDateFormat( format ).format( oneZero.getTime() ) );
        // 2001/01/01 00:00:00.000

        // get()メソッドを使用すれば任意の項目を取得できます。
        // 「年」だけ取得します。
        int year = oneZero.get( Calendar.YEAR );
        System.out.println( year );
        // 2001

        // 日時をずらす場合にはadd()メソッドを使用します。
        // 秒を1減らします。
        oneZero.add( Calendar.SECOND, -1 );
        System.out.println( new SimpleDateFormat( format ).format( oneZero.getTime() ) );
        // 2000/12/31 23:59:59.000
        // 「繰り上がり/繰り下がり」をちゃんと計算してくれます。
        // 日時の増減は必ずこのメソッドを使用するようにして
        // ください。けして各項目を直接計算しないようにしましょう。

        // 日付の比較はbefore()メソッド/after()メソッドを使用します。
        System.out.println( oneZero.before( now ) );
        // true
        System.out.println( oneZero.after( now ) );
        // false
        // A.before( B )はA < B、A.after( B )はA > Bという比較に
        // なります。

        // また、compareTo()メソッドを使えば大小を比較できます。
        System.out.println( oneZero.compareTo( now ) );
        // -1
        // A.compareTo( B )と考えた場合、compareTo()メソッドの
        // 結果は、ミリ秒数に変換後にA - Bした結果が返される、
        // と考えると分かりやすいでしょう。

        // Calendarクラスは、内部的には「エポックからのミリ秒」で
        // 日時を格納しています。これはgetTimeInMillis()メソッド
        // で取得できます。
        long l = now.getTimeInMillis();
        System.out.println( l );
        // 1267688006421
    }
}
// Sample.java
import java.util.Date;
import java.util.Calendar;
import java.text.SimpleDateFormat;

public class Sample
{
    public static void main( String[] args )
    {
        // 出力フォーマット。
        // 「年/月/日 時:分:秒.ミリ秒」と出力します。
        String format = "yyyy/MM/dd HH:mm:ss.SSS";

        // 現在日時を格納したCalendarクラスのインスタンスを取得します。
        Calendar now = Calendar.getInstance();
        // Dateクラスへの変換はgetTime() メソッドを使用します。
        Date output = now.getTime();
        // 出力します。
        System.out.println( new SimpleDateFormat( format ).format( output ) );
        // 2010/03/04 16:33:26.421
        // ……当然、実行時の日時によって出力結果は変わります。

        // 任意の日時を指定する場合、あらかじめclear()メソッドで
        // リセットしておくといいでしょう。
        Calendar oneZero = Calendar.getInstance();
        oneZero.clear();
        System.out.println( new SimpleDateFormat( format ).format( oneZero.getTime() ) );
        // 1970/01/01 00:00:00.000

        // 年月日のセットはset()メソッドで行います。
        // 2001年1月1日 0時0分0秒にセットします。
        oneZero.set( 2001, 0, 1, 0, 0, 0 );
        System.out.println( new SimpleDateFormat( format ).format( oneZero.getTime() ) );
        // 2001/01/01 00:00:00.000
        // 月に0を渡していることに注意してください。
        // 月は0から始まります。1月が0、12月が11です。
        // わかりやすくするために、専用のフィールドを使った方が
        // いいでしょう。以下がその例です。
        oneZero.set( 2001, Calendar.JANUARY, 1, 0, 0, 0 );
        System.out.println( new SimpleDateFormat( format ).format( oneZero.getTime() ) );
        // 2001/01/01 00:00:00.000

        // get()メソッドを使用すれば任意の項目を取得できます。
        // 「年」だけ取得します。
        int year = oneZero.get( Calendar.YEAR );
        System.out.println( year );
        // 2001

        // 日時をずらす場合にはadd()メソッドを使用します。
        // 秒を1減らします。
        oneZero.add( Calendar.SECOND, -1 );
        System.out.println( new SimpleDateFormat( format ).format( oneZero.getTime() ) );
        // 2000/12/31 23:59:59.000
        // 「繰り上がり/繰り下がり」をちゃんと計算してくれます。
        // 日時の増減は必ずこのメソッドを使用するようにして
        // ください。けして各項目を直接計算しないようにしましょう。

        // 日付の比較はbefore()メソッド/after()メソッドを使用します。
        System.out.println( oneZero.before( now ) );
        // true
        System.out.println( oneZero.after( now ) );
        // false
        // A.before( B )はA < B、A.after( B )はA > Bという比較に
        // なります。

        // また、compareTo()メソッドを使えば大小を比較できます。
        System.out.println( oneZero.compareTo( now ) );
        // -1
        // A.compareTo( B )と考えた場合、compareTo()メソッドの
        // 結果は、ミリ秒数に変換後にA - Bした結果が返される、
        // と考えると分かりやすいでしょう。

        // Calendarクラスは、内部的には「エポックからのミリ秒」で
        // 日時を格納しています。これはgetTimeInMillis()メソッド
        // で取得できます。
        long l = now.getTimeInMillis();
        System.out.println( l );
        // 1267688006421
    }
}

この単語を含むページ

「みだし」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2010/03/04
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。