日付・時間へ戻る | サンプル集目次へ戻る

実行結果
NewYearサンプルソース
滝廉太郎作詞の童謡「お正月」。「もういくつ寝ると」とはいうものの、実際何回寝ればいいのか気になりませんか? そんなあなたの悩みにズバリお答えします。CalendarとDateの変換もあるぞ。
NewYear.java
/**
 * 愛のJava256本ノック for Java 5.0
 * Javaサンプルソース ver0.2C "NewYear"
 * NewYear.java 「正月までの日にちを求める」
 *
 * 2005/09/23 制作:安永ノリカズ
 *
 * 【コンパイル&実行方法】
 *     >javac NewYear.java
 *     >java NewYear
 * 【キーワード】
 *     カレンダーフィールド(calendar fields), 書式文字列(format string),
 *     java.util.Formatterクラス, 
 * 【試してみよう】
 *     次の誕生日まで何日か求める。
 */
import java.lang.String;
import java.lang.System;
import java.util.Calendar;
import static java.util.Calendar.DAY_OF_YEAR;

public class NewYear {
    public static void main(String[] A00) {
        Calendar L00 = Calendar.getInstance();
        int L01 = L00.get(DAY_OF_YEAR);
        int L02 = L00.getActualMaximum(DAY_OF_YEAR);
        
        System.out.printf("あと%d回寝ると、お正月。%n", L02 - L01 + 1);
    }
}

/* ■ クラスの外でちょっと一言 ■
java.utilパッケージには、Dateクラス、Calendarクラスという、似たような感
じのクラスが存在します。単純にエポックタイム(1970年1月1日00:00:00からの
経過時間)を扱うときはDate、日付を扱うときはCalendarというのが一般的な使
い分けです。

ここで、不思議なのが「なぜDateクラスで日付を処理しないのか?」ということ
ですよね。実は、JDK1.0のときはDateで日付の処理を行ってました。しかし、
1.1でCalendarが登場して以降は、「年月日時分秒」はこのCalendarの担当に
なって、Dateに残された仕事は「ミリ秒」のみになってしまいました。APIをド
キュメントを見てみると、多くのメソッドが非推奨になっているのが分かると思
います。

そういう事情から、Dateクラスは「日付」と名乗りながら「日付」を処理するこ
とが許されない、悲しい存在になってます。試合に使ってもらえないベテラン野
球選手みたいで、思わず同情しちゃいそうですが、でもまあ、使えないもんは
しゃーないんで、このサンプルではもちろんCalendarを利用してます。

ちなみに、非推奨メソッドが多いからといって、Dateクラス自体が非推奨という
わけじゃありません。Date型を引数にとるメソッドはたくさんあります。
Calender→Dateの変換はCalendar#getTimeメソッドで、Date→Calendarの変換は
Calendar#setTimeメソッドで行いますので、覚えておいてください。

誕生日までの日数を求めるには、今年の誕生日を過ぎたかどうかで場合分けする
必要があります。その処理がポイントになりますね。
 */
↑ 先頭へ戻る

安永ノリカズのゲーム制作&Javaサンプル集 / Java初心者用サンプル集『愛のJava256本ノック』