美人すぎない化粧品販売員がアプリ開発を目指す

Javaの構文、オブジェクト指向、APIなど、プログラミング初心者の私がアプリ開発までに理解したことをまとめたブログ

標準クラス 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

 

※ 同じような名前のjava.sql.Dateと混同しない

 

 

                             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秒

〈人が日時を指定しやすい形式〉     〈人が日時を読みやすい形式〉

 

 

〜このようにJavaにはいろいろなAPIが入っているので、APIリファレンスという取扱説明書を読みながら利用していく〜