1
0

【Java・学習ログ14】日付と時刻について

Posted at

教本に沿ってやってみたシリーズ、『第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を活用する

  • java.util.Calendar

(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を指定する

  • java.text.SimpleDateFormat

(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.timeパッケージ

javaの新たな日時API。
Dateに代わり、ナノ秒単位で瞬間を捉えるInstantクラスや、Calendarクラスに代わるZonedDateTimeクラスが存在する。
スクリーンショット 2023-10-10 215134.png
※Time APIの多くではnewが禁止されているため、インスタンスを生成するには静的メソッドであるnow()やof()を使用する。

タイムゾーン情報を含まない曖昧な日時情報を捉えるLocalDateTimeクラスなどは広く利用される。

その他曖昧な日時情報を表すクラスは、java.time.Temporalインタフェースを実装している。
同様の動作を指示する場合にはメソッドを呼び出すが、共通のメソッド名を使うように設計されている。

now() 現在日時からインスタンスを生成
of()/of~() 他の種類から変換してインスタンスを生成
parse() 文字列からインスタンスを生成 ※書式はDateTimeFormatで指定
format() 保持情報をインスタンスに変換
get~() 年や月の情報を取得する
isAfter()/isBefore() 引数で渡したインスタンスとの前後関係を判定
plus~()/minus~() 指定した分だけ未来、過去の時点を返す。

スクリーンショット 2023-10-11 204143.png

2つの時刻を格納するTime API

  • Durationクラス
    「秒~時間」以下の間隔を表す場合に用いる。
  • Periodクラス
    「日数」ベースの期間を表す場合に用いる。

(簡易メモ)

  1. 難しすぎたので省略
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0