【Java】日付・時刻を取得する

Java imageJava
Java image
Java

現在の日付・時刻を生成し、フォーマットを指定して表示する

Date-Time APIを使って現在の時刻を取得します。

ファイル構成

Java開発環境によってファイル構成は異なると思います。こちらはGradleをビルドツールに使っているのでなんだかたくさんのファイルがありますが、必要なのは下記の(1)と(2)だけです。
(2)でDate-Time APIを使った現在日時の取得メソッドを書いて、それを(1)で呼び出して使っています。

{プロジェクトディレクトリ}
├── app
(中略)
│   ├── build.gradle
│   └── src
│       ├── main
│       │   ├── java
│       │   │   └── sample
│       │   │       └── dateTime
│       │   │           ├── App.java              // (1)main関数を含む
│       │   │           └── util
│       │   │               └── DateTime.java     // (2)Date-Time APIから日時取得
(省略)

Javaソースコード

java.timeパッケージと、java.time.formatパッケージを使います。
フォーマットなしの場合と、formatterを使った表記方法を示しています。

38行目:時間と秒の表記方法に注意!!
時間の表記は大文字「HH」, 秒は「ss」ですが、小数点以下は「.SSS」と大文字になります

package sample.dateTime.util;                                    
                                    
import java.time.LocalDate;                                    
import java.time.LocalDateTime;                                    
import java.time.LocalTime;                                    
import java.time.format.DateTimeFormatter;                                    
                                    
public class DateTime {                                    
                                    
    public static void printLocalDateTimeNow() {                                    
        //現在日時情報で初期化されたインスタンスの取得                                    
        var nowDateTime = LocalDateTime.now();                                    
        //フォーマットなしで日時表示                                    
        System.out.println("フォーマットなし日時表示 :" + nowDateTime);                                    
        // 日時フォーマット定義                                    
        DateTimeFormatter formatDateTime = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");                                    
        // フォーマットされた日時表示                                    
        System.out.println("フォーマットされた日時表示:" + nowDateTime.format( formatDateTime ));                                    
    }                                    
                                    
    public static void printLocalDateNow() {                                    
        // 現在日時情報で初期化されたインスタンスの取得                                    
        var nowDate = LocalDate.now();                                     
        //フォーマットなしで日時表示                                    
        System.out.println("フォーマットなし日付表示 :" + nowDate);                                    
        // 日時フォーマット定義                                          
        DateTimeFormatter formatDate = DateTimeFormatter.ofPattern("yyyy/MM/dd");                                    
        // フォーマットされた日時表示                                    
        System.out.println("フォーマットされた日付表示:" + nowDate.format( formatDate ));                                    
    }                                                                           
                                                                                   
    public static void printLocalTimeNow() {                                    
        // 現在時刻情報で初期化されたインスタンスの取得                                    
        var nowTime = LocalTime.now();                                             
        //フォーマットなしで時刻表示                                           
        System.out.println("フォーマットなし時刻表示 :" + nowTime);                                    
        // 時刻フォーマット定義                                          
        DateTimeFormatter formatTime = DateTimeFormatter.ofPattern("HH:mm:ss.SSS");    //時間と秒の表記方法に注意!!                                
        // フォーマットされた時刻表示                                    
        System.out.println("フォーマットされた時刻表示:" + nowTime.format( formatTime ));                                    
    }                                                                    
                                                                         
}                             
package sample.dateTime;                                         
                                    
import sample.dateTime.util.DateTime;                                    
                                                                   
public class App {                                             
                                                                              
    public static void main(String[] args) {                                    
                                                           
        DateTime dt = new DateTime();                                    
                                                                                    
        //現在の日時表示                                                                  
        dt.printLocalDateTimeNow();                                               
                                                                      
        //現在の日付表示                                                                                     
        dt.printLocalDateNow();                                    
                                                                                                                                  
        //現在の時刻表示                                                 
        dt.printLocalTimeNow();                                                                                                       
    }                                    
                                    
}                                   

実行結果

コンパイル&実行も開発環境によって異なると思いますが、ここではGradleを使った実行の例を記します。

$ cd {プロジェクトディレクトリ}
$ ./gradlew run

> Task :app:run
フォーマットなし日時表示 :2021-10-17T13:56:31.297210
フォーマットされた日時表示:2021/10/17 13:56:31
フォーマットなし日付表示 :2021-10-17
フォーマットされた日付表示:2021/10/17
フォーマットなし時刻表示 :13:56:31.314558
フォーマットされた時刻表示:13:56:31.314

任意の日時を設定する

任意の時刻を指定することもできます。
先程のソースコードに少しコードを追加して確認してみましょう。
下の例では、「2021年10月15日 12時30分10秒」を生成します。

package sample.dateTime.util;                                    
                                    
import java.time.LocalDate;                                    
import java.time.LocalDateTime;                                    
import java.time.LocalTime;                                    
import java.time.format.DateTimeFormatter;                                    
                                    
public class DateTime { 

(中略)
    public static void printCreatedDateTime(int Y, int M, int D, int hh, int mm, int ss){                                
        //set the Date and Time                                                                          
        var theDateTime = LocalDateTime.of(Y, M, D, hh, mm, ss);                                
        System.out.println(theDateTime);                                                                               
    } 
}

main()クラスにも追加します

package sample.dateTime;    
    
import sample.dateTime.util.DateTime;    
    
public class App {    
    
    public static void main(String[] args) {    
    
(中略)    
    
        //任意の日時を指定    
        dt.printCreatedDateTime(2021, 10, 30, 12, 30,10);    
    }    
    
}   

実行結果

$ ./gradlew run
2021-10-15T12:30:10      //指定した日時が取得できた!!

もしも、日にちとして存在しない数値をいれたらどうなるか?
これはExceptionErrorが発生します。試しに、「10月40日」となる数値を引数で渡してみます。

       //任意の日時を指定    
        dt.printCreatedDateTime(2021, 10, 40, 12, 30,10);  

実行するとエラーとなりました。

$ ./gradlew run

Exception in thread "main" java.time.DateTimeException: Invalid value for DayOfMonth (valid values 1 - 28/31): 40
        at java.base/java.time.temporal.ValueRange.checkValidValue(ValueRange.java:319)
        at java.base/java.time.temporal.ChronoField.checkValidValue(ChronoField.java:718)
        at java.base/java.time.LocalDate.of(LocalDate.java:272)
        at java.base/java.time.LocalDateTime.of(LocalDateTime.java:338)
        at sample.dateTime.util.DateTime.printCreatedDateTime(DateTime.java:45)
        at sample.dateTime.App.main(App.java:21)

FAILURE: Build failed with an exception.

コメント

タイトルとURLをコピーしました