標準クラス API 〜日付情報 Dateクラス〜
Javaにはクラスを定義しなくても、皆がよく使うものはもともとクラスとして入っている→標準クラス API
この標準クラスの中にクラスの中身は既に定義されているので、
あとはMainから呼び出すだけでOK
その中でもよく使うもの
日付情報を扱うーDateクラス
ex. ATMプログラム
取引を行った時刻 何年何月何日の何時何秒か
⇨Javaでは、日付情報を表すために使う型(クラス)が4つあり、
それぞれの用途に合わせて使い分ける
形式1:long型整数値
基準日時である1970年1月1日0分0秒(エポック)から経過したミリ秒(1/1000秒)数で日付情報を表現する方法
System.currentTimeMills( )メソッドを呼ぶ
ex) public class Main{
public static void main(String[ ] args){
long start=System.currentTimeMills( );
//long型の箱に入った変数startにメソッドを呼び出してその時点での時間を代入する
// 何らかの時間がかかる処理を記述
long end=System.currentTimeMills( );
//変数endにメソッドを呼び出してその時点での時間を代入する
System.out.println("処理にかかった時間は"+(end-start)+"ミリ秒でした");
}
}
このメソッドを使うデメリット
・ 人間はlong値から「年・月・時・分・秒」を読み取ることができない
(long値はミリ秒 1/1000秒が何回あったかが書いてある)
・ long型は日付情報以外の数字の格納にも利用される型なので、
必ずしも変数の中身が日付情報と断定できない
形式2:Date型インスタンス
(最も利用される:必ずしも中身が日付情報か分からないというlong値のデメリットを克服したもの)
java.util.Dateクラス
「Date型の変数であれば、中身は日付情報である」と一目で分かる
〈構文〉
1. Date d=new Date( ); //現在の日時を持つインスタンスの生成
2. Date d=new Date(long 値); //long値の日時を持つインスタンスの生成
1のDate型インスタンス内部に格納されているlong値を取り出したい場合は
getTime( )メソッド
2のlong値をセットしたい場合(代入したい場合)
setTime( )メソッド
ex. import java util.Date;
//importしておくとDateと書いた場合はjava.util.Dateと判断してくれるので便利
public class Main{
public static void main(String[ ] args){
Date now=new Date( );
//Date型の変数nowに現在の時間インスタンスを作り、代入する
System.out.println(now);
→出力 Fri Aug 12 16:05:55
(金 10月 12日 時 分 秒)
System.out.println(now.getTime( )); //getTime( )→long値の出力
→出力 1313132755277
Date past=new Date(13162225935L); //long値の日時を持つインスタンスの生成
System.out.println(past);
→出力 sep 22 01:23:45 2011
long型
1316225925L
↑ |
getTime( )でDate型からlong値を出力 Date( )またはsetTime( )でlong値を格納
| ↓
Date型
1316225925L
※ Date型の時点では入っている値はlong値のまま
new Date( )でインスタンスを作成すると、人間が読める状態で出力できるようになる
・Date型から人間が扱いやすい形式に変換する2つの方法
1. 6つのint型に変換する形式
2011,9,22,1,23,45
(年、月、日、時、分、秒)
→java.util.Calendarクラス
〈「6つのint値」→Date型インスタンスに変換したい時の構文〉
Calendar c=Calendar.getInstance( );
//まずCalender型のインスタンスを生成する
c.set(年、月、日、時、分、秒);
//インスタンスに「6つのint値」の値をセットする
Date d=c.getTime
//Date型の変数にcから取り出した値を代入する
〈Date型→「6つのint値」に変換したい時の構文〉
Calender c=Calendar.getInstance( );
c.setTime(d);
//dはDate型変数。cにDate型変数をセットする
int year=c.get(Calendar YEAR);
//Date型から年だけを取り出す
int month=c.get(Calendar MONTH);
//Date型から月だけを取り出す
int day=c.get(Calendar DAY_OF_MONTH);
//Date型から日にちだけを取り出す
int hour=c.get(Calendar HOUR);
//Date型から時だけを取り出す
int minutes=c.get(Calendar MINUTES);
//Date型から分だけを取り出す
int second=c.get(Calendar SECOND);
//Date型から秒だけを取り出す
※ 「月」だけは値に注意
Calenderを用いて「月」の情報を取得、設定する場合
1〜12ではなく、0〜11で指定
ex. 2月 「c.get(Calendar.MONTH,1);
ex. import java.util.Calendar;
import java.util.Date; //Date型を変換するので、Dateクラスも使用する
public class Main{
public static void main(String[ ] args){
//現在の年を表示
Date now=new Date( ); //現時刻のインスタンスを生成
// さらに人間が読みやすい状態に変換していく
Calendar c=Calendar.getInstance( ); //Calenderインスタンス生成
// Date→「6つのint値」に変換する
c.setTime(now); //Date型の値(now)をcに代入する
int y=c.get(Calendar.Year);
// cに代入したDate型の中から年の部分だけ取り出す
System.out.println("今年は"+y+"年です");
//「6つのint値」→Dateに変換する
c.set(2010,8,22,1,23,45); //6つのint型を変数cに代入
c.set(Calendar.Year,2011); //代入したint型の内、年だけ2011に変更
(2011をYearに代入)
Date past=c.getTime( );//cから値を取り出して、Date型に代入する
System.out.println(past); //Date型の形で出力される
}
}
2. String型に変換する形式
2011年9月22日1時23分45秒
1. Date⇨文字列(String)生成
〈構文〉
SimpleDateFormat f=new SimpleDateFormat(書式文字列);
String s=f.format(d);//Date型変数dをString型に代入する
ex. import java.text.SimpleDateFormat;
import java.util.Date;
public class Main{
public static void main(String[ ] args){
//本日の日時を表示する
Date now=now Date( ); //インスタンスを生成
SimpleDateFormat f=new SimpleDateFormat("yyy/MM/dd HH:mm:ss");
String s=f.format(now);
System.out.println(s);
}
}
出力 2011/09/22 01:23:45
〈書式文字列〉
y→年 a/p→午前/午後
M→月 H→時(0〜23) K→時(0〜11)
d→日 m→分
E→曜日 s→秒
2. 文字列(String)⇨Date生成
〈構文〉
SimpleDateFormat f=new SimpleDateFormat(書式文字列);
Date d=f.parse(文字列);
ex. import java.text.SimpleDateFormat;
import java.util.Date;
public class Main{
public static void main(String[ ] args){
//本日の日時を表示する
Date now=now Date( ); //インスタンスを生成
SimpleDateFormat f=new SimpleDateFormat("yyy/MM/dd HH:mm:ss");
Date d=f.parse("2011/09/22 01:23:45);
}
}
出力 30458473920....
☆ まとめ
long型 〈パソコンが読みやすい形式〉
1316....
↑ |
getTime( ); Date( ); SetTime( );
| ↓
Date型 ...new Date( );を現在日時を取得
1316....
| ↑ parse( ); ↑ | format( );
Calendar SimpleDateFormat
↓ | | ↓
6つのint型 String型
2011,09,22,01,23,45 2011年9月22日1時23分45秒
〈人が日時を指定しやすい形式〉 〈人が日時を読みやすい形式〉