詳細は次のリンクで調べましょう。
今日の日付の情報を得るのにjava.util.Calendarクラスを利用します。
Calendar d = Calendar.getInstance();//現在の時間を取得
そして、d.get(フィールド定数)で各種情報が得られます。
フィールド定数は、Calendar.YEAR、Calendar.MONTH、Calendar.DATE などがります。
またd.getTimeInMillis()でエポックタイム(epoch time)が得られます。d.setTimeInMillis()で設定も可能です。
エポックタイムは1970年1月1日 00:00:00.000 GMT (グレゴリオ暦) からの時間を意味します。
この単位はミリ秒のlong値で、一回だけ乱数の変わり使うことができます。
1日の24時間をミリ単位のエポックタイムにすると1000×60秒60分×24時間=886400000秒になります。
以下で、各種使い方の例を示します。
import java.io.*;//InputStreamReader,BufferedReader利用のため import java.util.*; //Calendarクラス利用のため public class Test { public static void main(String argv[]) throws Exception{ InputStreamReader is = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(is); Calendar rightNow = Calendar.getInstance();//現在の時間を取得 int rightYear = rightNow.get(Calendar.YEAR); int rightMonth = rightNow.get(Calendar.MONTH) + 1;// JANUARYが0なので調整 int rightDate = rightNow.get(Calendar.DATE); System.out.print("誕生の西暦年>"); int birthYear = Integer.parseInt(br.readLine()); System.out.print("誕生の月(1-12)>"); int birthMonth = Integer.parseInt(br.readLine()); System.out.print("誕生の日(1-31)>"); int birthDate = Integer.parseInt(br.readLine()); int nen = rightYear - birthYear; if(rightMonth < birthMonth || rightMonth == birthMonth && rightDate < birthDate ){ nen--;//この条件(月日)では、まだ生まれていない。 } System.out.println("今日は、" + rightYear + "年" + rightMonth + "月" + rightDate + "日で"); System.out.print( " " + birthYear + "年" + birthMonth + "月" + birthDate + "日生まれの人の"); System.out.println("年齢は=" + nen + "才です"); } }
実行例を以下に示します
誕生の西暦年>1980 誕生の月(1-12)>5 誕生の日(1-31)>18 今日は、2005年6月17日で 1980年5月18日生まれの人の年齢は=25才です
import java.io.*;//InputStreamReader,BufferedReader利用のため import java.util.*; //Calendarクラス利用のため public class Test { public static void main(String argv[]) throws Exception { InputStreamReader is = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(is); System.out.println("曜日定数のデータを列挙"); System.out.println("日:" + Calendar.SUNDAY); System.out.println("月:" + Calendar.MONDAY); System.out.println("火:" + Calendar.TUESDAY); System.out.println("水:" + Calendar.WEDNESDAY); System.out.println("木:" + Calendar.THURSDAY); System.out.println("金:" + Calendar.FRIDAY); System.out.println("土:" + Calendar.SATURDAY); System.out.println(); String[] weekStr = { "NON", "日", "月", "火", "水", "木", "金", "土" }; System.out.print(" 西暦年>"); int yy = Integer.parseInt(br.readLine()); System.out.print("月(1-12)>"); int mm = Integer.parseInt(br.readLine()); Calendar calendar1 = Calendar.getInstance(); calendar1.set(yy, mm - 1, 1);//入力年月の一日のデータを設定 int iweek = calendar1.get(Calendar.DAY_OF_WEEK); System.out.println(yy+"年"+mm+"月"+"1日の曜日=" + weekStr[iweek]); System.out.println("この月の日数=" + calendar1.getActualMaximum(Calendar.DATE)); } }
実行例を以下に示します
曜日定数のデータを列挙 日:1 月:2 火:3 水:4 木:5 金:6 土:7 西暦年>2009 月(1-12)>2 2009年2月1日の曜日=日 この月の日数=28
CalendarオブジェクトのgetTime()メソッドで、Dataのオブジェクトが戻り値で得ることができます。
(setTimeメソッドで、Dataオブジェクトの設定可能です。)
Dataクラスは、そのコンストラクタで現在時間が記憶されるDataオブジェクトを生成できます。
そしてgetTimeメソッドで、1970 年 1 月 1 日 00:00:00 GMT からのミリ秒数をlongで返します。
この時間は、エポックタイム(epoch time)と呼ばれますが、この時間でDataオブジェクトの
内部記憶情報を変更する場合は、setTimeメソッドを使います。
また、Dateオブジェクトを比較する after(Date when)、before(Date when)、 boolean equals(Object obj)
が用意されています。
なお、Dateオブジェクトから表示に使うStringを取得する場合、SimpleDateFormatクラスを使います。
SimpleDateFormatは、コンストラクタで次のフォーマットを指定して生成し、
そのオブジェクトのformatメソッド引数でDateオブジェクトし、表示用の文字列を取得します。
文字 | 説明 |
---|---|
yyyy | 年 1996 |
yy | 年 96 |
G | 紀元 AD |
MM | 月 July, Jul, 07 |
w | 年における週 27 |
W | 月における週 2 |
D | 年における日 189 |
d | 月における日 10 |
F | 月における曜日 2 |
E | 曜日 Tuesday, Tue |
a | 午前/午後 PM |
H | 一日における時(0?23) 0 |
k | 一日における時(1?24) 24 |
K | 午前/午後の時(0?11) 0 |
h | 午前/午後の時(1?12) 12 |
m | 分 30 |
s | 秒 55 |
S | ミリ秒 978 |
z | タイムゾーン Pacific Standard Time, PST, GMT-08:00 |
Z | タイムゾーン -0800 |
Date d = new Date();//現在の時間を取得 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd a hh:mm:ss", Locale.US); String s=sdf.format(d); System.out.println(s); sdf = new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒"); System.out.println(sdf.format(d));
2012/07/07 PM 10:05:22 2012年07月07日 22時05分22秒