Javaプログラミング/Javaの基本

日時とカレンダー(4ページ目)

日時を扱う場合、Javaでは専用のクラスを利用します。その基本的な使い方を理解しておきましょう。

執筆者:掌田 津耶乃

日時の差を求めるには?


2つの日時の差を計算する、ということもよくありますね。Calendarには、2つのCalendarの差を計算するメソッドというのは特に用意されてはいません。これは、ちょっとばかり考え方を変えてやる必要があります。

2つの日時の差というのは、それぞれの日時の値を単純な数値で表現できれば、案外と簡単に求められます。Calendarでには、内部で「エポックからの UTC ミリ秒値」で日時を管理していましたね。これは、基準日時からどれだけの時間が経過したかを示す数値でした。ということは、それぞれの日時でこの経過時間の値を調べ、その差を計算すれば、2つの日時の差がどれだけのものか、ミリ秒の値で取り出せるわけです。

public static void main(String[] args) {
  Calendar cal1 = Calendar.getInstance();
  cal1.set(Calendar.HOUR, 0);
  cal1.set(Calendar.MINUTE, 0);
  cal1.set(Calendar.SECOND, 0);
  cal1.set(Calendar.MILLISECOND, 0);
  
  Calendar cal2 = Calendar.getInstance();
  cal2.set(2001,0,1,0,0,0);

  long s1 = cal1.getTimeInMillis();
  long s2 = cal2.getTimeInMillis();
  int d =(int)((s1 - s2) / (1000 * 60 * 60 * 24));
  System.out.println("差は、" + d + "日間");
}

プログラムを実行すると、2001年1月1日から今日まで何日あるか計算し表示する。

ここでは、今日の日付をcal1に、2001年1月1日をcal2にそれぞれ設定し、その差を計算しています。それぞれのCalendarインスタンスは、計算を単純にするため、時分秒をすべてゼロにしています。Calendarでは、年月日時分秒の個々の値を変更するのに「set」というメソッドを使います。これは、

[Calendar].set( 設定する単位 , 設定値 );

こんな形で使います。addと同じように、第1引数に変更する単位をCalendarのクラスフィールドから指定し、第2引数に設定する値を渡します。また、年月日時分秒をまとめて変更する場合には、setの引数にすべての単位の値をまとめて記述することもできます。

ここで注意しておきたいのは、MONTHの値です。MONTHは、ゼロから始まる数値で指定します。つまり「1月」は「0」に、「12月」は「11」になるのです。これはよく覚えておきましょう。
  • 前のページへ
  • 1
  • 3
  • 4
  • 5
  • 次のページへ

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます