![]() | 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メソッドで行いますので、覚えておいてください。
誕生日までの日数を求めるには、今年の誕生日を過ぎたかどうかで場合分けする
必要があります。その処理がポイントになりますね。
*/