教本に沿ってやってみたシリーズ、『第15章』その2。
≪使用教材≫スッキリわかるJava入門 第3版 スッキリわかるシリーズ
■日付と時刻
基準日付(エポック)…1970年1月1日0時0分0秒
日時情報を扱うには下記のような形式がある。
- long型
基準日時(エポック)から経過したミリ秒で記述する方法。
現在日時を得られるSystem.currenTimeMillisメソッドを用いて処理時間の計測を行う。
public class Main {
public static void main(String[] args) {
long start = System.currentTimeMillis();
long end = System.currentTimeMillis();
System.out.println("処理に掛かった時間は" + (end - start) + "ミリ秒");
}
-
date型
Javaで日時を扱う場合に最も利用される形式。
java.util.Dateクラスからインスタンスを生成する。
import java.util.Date;
public class Main {
public static void main(String[] args){
Date now = new Date(); // 現在日時の取得
System.out.println(now);
System.out.println(now.getTime()); // long値の取り出し
Date past = ndw Date(1600705425827L)
System.out.println(past);
}
-
int型
現在時刻を割り出すには「System.currenTimeMillisメソッドを使う」「Dateをnewする」が有効的だが、指定時刻を示す場合には整数(int)を使うのが一般的。 -
String型
画面に時刻を表示する場合にはStringに変換しなければならない。
■APIを活用する
(date型+int型)
import java.util.Calendar;
import java.util.Date;
public class Main {
public static void main(String[] args){
/* int値→Date型 */
Calendar c = Calendar.getInstance();
c.set(1993,9,11,1,23,45); // 6つのint値を設定
c.set(Calendar.MONTH, 6); // 月を7月に変更
Date d = c.getTime(); // int値を引き出してDate型に格納
System.out.println(d);
// 【実行結果】Sun Jul 11 01:23:45 JST 1993
/* Date型→int値 */
Date now = new Date(); // Date型インスタンスを生成
c.setTime(now); // 現在時刻を取得
int y = c.get(Calendar.YEAR); // YEARのみ取り出し
System.out.println("今年は" + y + "年です");
// 【実行結果】今年は2023年です
}
}
※月の取得には0~11を指定する
(Date型+String型)
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) throws Exception {
SimpleDateFormat f =
new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); // 書式文字列を指定
/* String⇒Date */
Date d = f.parse("2020/12/05 01:23:45"); // 文字列を挿入
System.out.println(d);
// 【実行】Sat Dec 05 01:23:45 JST 2020
/* Date⇒String */
Date now = new Date(); // 現在時刻の取得
String s = f.format(now);
System.out.println("現在は" + s + "です");
// 【実行】現在は2023/10/10 21:12:39です
}
}
javaの新たな日時API。
Dateに代わり、ナノ秒単位で瞬間を捉えるInstantクラスや、Calendarクラスに代わるZonedDateTimeクラスが存在する。
※Time APIの多くではnewが禁止されているため、インスタンスを生成するには静的メソッドであるnow()やof()を使用する。
タイムゾーン情報を含まない曖昧な日時情報を捉えるLocalDateTimeクラスなどは広く利用される。
その他曖昧な日時情報を表すクラスは、java.time.Temporalインタフェースを実装している。
同様の動作を指示する場合にはメソッドを呼び出すが、共通のメソッド名を使うように設計されている。
now() | 現在日時からインスタンスを生成 |
of()/of~() | 他の種類から変換してインスタンスを生成 |
parse() | 文字列からインスタンスを生成 ※書式はDateTimeFormatで指定 |
format() | 保持情報をインスタンスに変換 |
get~() | 年や月の情報を取得する |
isAfter()/isBefore() | 引数で渡したインスタンスとの前後関係を判定 |
plus~()/minus~() | 指定した分だけ未来、過去の時点を返す。 |
2つの時刻を格納するTime API
-
Durationクラス
「秒~時間」以下の間隔を表す場合に用いる。 -
Periodクラス
「日数」ベースの期間を表す場合に用いる。
(簡易メモ)
- 難しすぎたので省略