現在の日付・時刻を生成し、フォーマットを指定して表示する
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.
コメント