Javaの日付と時刻のクラス(Date、DateFormat、Calendar)の詳細説明

1日付クラス

1.1 概要

java.util.Dateクラスは、ミリ秒単位の精度で特定の瞬間を表します。Date クラスのコンストラクターは、ミリ秒の値を日付オブジェクトに変換できます。

1.2 Dateクラスの構築方法

  • public Date(): Date オブジェクトを割り当て、割り当てられた時刻 (ミリ秒単位の精度) を表すようにこのオブジェクトを初期化します。
  • public Date(long date): 「エポック」と呼ばれる標準基準時間 (1970 年 1 月 1 日 00:00:00 GMT) からの指定されたミリ秒数を表す Date オブジェクトを割り当てて初期化します。

ヒント: 私たちは東第 8 地区にいるため、基準時間は 1970 年 1 月 1 日の 8:00:00 です。

簡単に言うと、パラメータなしの構築を使用すると、現在のシステム時間のミリ秒時間を自動的に設定できます。ロングタイプの構築パラメータを指定すると、ミリ秒時間をカスタマイズできます。例えば:

import java.util.Date;

public class DemoDate {
    
    
    public static void main(String[] args) {
    
    
        // 创建日期对象,把当前的时间转成日期对象
        System.out.println(new Date()); // Sat Sep 19 23:11:21 CST 2020
        // 创建日期对象,把当前的毫秒值转成日期对象
        System.out.println(new Date(0L)); // Thu Jan 01 08:00:00 CST 1970
    }
}

ヒント: println メソッドを使用すると、Date クラスの toString メソッドが自動的に呼び出されます。Date クラスは、Object クラスの toString メソッドをオーバーライドして書き換えるため、結果は指定された形式の文字列になります。

1.3 Date クラスの getTime メソッド: ミリ秒数を返す

2 DateFormat クラス

java.text.DateFormatこれは、日付/時刻書式設定サブクラスの抽象クラスです。このクラスを使用して、日付とテキストの間の変換を完了することができます。つまり、Date オブジェクトと String オブジェクトの間で相互に変換できます。

  • 書式設定: 指定された形式に従って、Date オブジェクトから String オブジェクトに変換します。(フォーマット)
  • 解析: 指定された形式に従って String オブジェクトから Date オブジェクトに変換します。(解析)

2.1 そのサブクラスSimpleDateFormatの構築メソッド

DateFormat は抽象クラスであり、直接使用できないため、一般的に使用されるサブクラスが必要ですjava.text.SimpleDateFormatこのクラスには、書式設定または解析基準を指定するためのスキーマ (形式) が必要です。構築方法は次のとおりです。

  • public SimpleDateFormat(String pattern): 指定されたパターンとデフォルトのロケールの日付形式記号を使用して SimpleDateFormat を構築します。

パラメーター パターンは、日付と時刻のカスタム形式を表す文字列です。

フォーマット規則

一般的に使用される形式ルールは次のとおりです。

識別文字 (大文字と小文字が区別されます) 意味
y
M
d
H 時間
メートル ポイント
s 2番

SimpleDateFormat オブジェクトを作成するコードは次のとおりです。

import java.text.DateFormat;
import java.text.SimpleDateFormat;

public class Demo02SimpleDateFormat {
    
    
    public static void main(String[] args) {
    
    
        // 对应的日期格式如:2018-01-16 15:06:38
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    }    
}

2.2 DateFormatクラスの共通メソッド

DateFormat クラスの一般的に使用されるメソッドは次のとおりです。

  • public String format(Date date): Date オブジェクトを文字列にフォーマットします。
  • public Date parse(String source): 文字列を解析して Date オブジェクトにします。
2.2.1 フォーマット方法

format メソッドを使用するコードは次のとおりです。

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
 把Date对象转换成String
*/
public class Demo03DateFormatMethod {
    
    
    public static void main(String[] args) {
    
    
        Date date = new Date();
        // 创建日期格式化对象,在获取格式化对象时可以指定风格
        DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
        String str = df.format(date);
        System.out.println(str); // 2020年09月19日
    }
}
2.2.2 解析方法

parse メソッドを使用するコードは次のとおりです。

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
 把String转换成Date对象
*/
public class Demo04DateFormatMethod {
    
    
    public static void main(String[] args) throws ParseException {
    
    
        DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
        String str = "2018年12月11日";
        Date date = df.parse(str);
        System.out.println(date); // Tue Dec 11 00:00:00 CST 2018
    }
}

2.3 総合演習

質問: 日時関連 API を使用して、人が生まれてから何日目かを計算してください。

アイデア:

1. 現在時刻に対応するミリ秒値を取得します。

2. 生年月日に対応するミリ秒値を取得します。

3. 2回減算(現在時刻 – 生年月日)

コード:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

/*
 把String转换成Date对象
*/
public class Demo {
    
    
    public static void main(String[] args) throws ParseException {
    
    
        System.out.println("请输入出生日期 格式 YYYY-MM-dd");
        // 获取出生日期,键盘输入
        String birthdayString = new Scanner(System.in).next();
        // 将字符串日期,转成Date对象
        // 创建SimpleDateFormat对象,写日期模式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        // 调用方法parse,字符串转成日期对象
        Date birthdayDate = sdf.parse(birthdayString);
        // 获取今天的日期对象
        Date todayDate = new Date();
        // 将两个日期转成毫秒值,Date类的方法getTime
        long birthdaySecond = birthdayDate.getTime();
        long todaySecond = todayDate.getTime();
        long secone = todaySecond-birthdaySecond;
        if (secone < 0){
    
    
            System.out.println("还没出生呢");
        } else {
    
    
            System.out.println(secone/1000/60/60/24);
        }
    }
}
请输入出生日期 格式 YYYY-MM-dd
2019-09-12
373

3 カレンダークラス

3.1 コンセプト

java.util.Calendarこれは、Date の後に表示され、多くの Date メソッドを置き換えるカレンダー クラスです。このクラスは、簡単にアクセスできるように、すべての可能な時間情報を静的メンバー変数としてカプセル化します。Calendar クラスは、さまざまな時間属性を取得するのに便利です。

3.2 入手方法

Calendar は抽象クラスです。言語に依存するため、Calendar クラスはオブジェクトの作成時に直接作成されませんが、次のように静的メソッドを通じて作成され、サブクラス オブジェクトを返します。

カレンダーの静的メソッド

  • public static Calendar getInstance(): デフォルトのタイムゾーンとロケールを使用してカレンダーを取得します

例えば:

import java.util.Calendar;

public class Demo06CalendarInit {
    
    
    public static void main(String[] args) {
    
    
        Calendar cal = Calendar.getInstance();
    }    
}

3.3 一般的な方法

Calendar クラスの API ドキュメントによると、一般的なメソッドは次のとおりです。

  • public int get(int field): 指定されたカレンダー フィールドの値を返します。
  • public void set(int field, int value): 指定されたカレンダー フィールドを指定された値に設定します。
  • public abstract void add(int field, int amount): カレンダーのルールに従って、指定されたカレンダー フィールドに指定された時間を加算または減算します。
  • public Date getTime(): このカレンダー時間値 (エポックから現在までのミリ秒オフセット) を表す Date オブジェクトを返します。

Calendar クラスは、特定のカレンダー フィールドを表す多くのメンバー定数を提供します。

フィールド値 意味
月(0から始まり+1で使用可能)
DAY_OF_MONTH 月の日(日)
時間 時間 (12 時間形式)
HOUR_OF_DAY 時間 (24 時間形式)
ポイント
2番 2番
曜日 曜日 (曜日、日曜日は 1、-1 とともに使用可能)
3.3.1 get/setメソッド

get メソッドは指定されたフィールドの値を取得するために使用され、set メソッドは指定されたフィールドの値を設定するために使用されます。コード使用法のデモ:

import java.util.Calendar;
public class Demo {
    
    
    public static void main(String[] args) {
    
    
        // 创建Calendar对象
        Calendar cal = Calendar.getInstance();
        // 获取年 
        int year = cal.get(Calendar.YEAR);
        // 获取月
        int month = cal.get(Calendar.MONTH) + 1;
        // 获取日
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
        System.out.print(year + "年" + month + "月" + dayOfMonth + "日");
    }
}
2020920
import java.util.Calendar;

public class Demo07CalendarMethod {
    
    
    public static void main(String[] args) {
    
    
        Calendar cal = Calendar.getInstance();
        // 设置年
        cal.set(Calendar.YEAR, 2018);
        // 获取年
        int year = cal.get(Calendar.YEAR);
        // 获取月
        int month = cal.get(Calendar.MONTH) + 1;
        // 获取日
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
        System.out.print(year + "年" + month + "月" + dayOfMonth + "日");
    }
}
2018920
3.3.2 addメソッド

add メソッドは、指定されたカレンダー フィールドの値を加算および減算できます。2 番目のパラメータが正の数値の場合はオフセットが加算され、負の数値の場合はオフセットが減算されます。次のようなコード:

import java.util.Calendar;

public class Demo08CalendarMethod {
    
    
    public static void main(String[] args) {
    
    
        Calendar cal = Calendar.getInstance();
        // 获取年
        int year = cal.get(Calendar.YEAR);
        // 获取月
        int month = cal.get(Calendar.MONTH) + 1;
        // 获取日
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + "年" + month + "月" + dayOfMonth + "日");
        // 使用add方法
        cal.add(Calendar.DAY_OF_MONTH, 2); // 加2天
        cal.add(Calendar.YEAR, -3); // 减3年
        // 获取年
        year = cal.get(Calendar.YEAR);
        // 获取月
        month = cal.get(Calendar.MONTH) + 1;
        // 获取日
        dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + "年" + month + "月" + dayOfMonth + "日");
    }
}
20209202017922
3.3.3 getTime メソッド: 対応する Date オブジェクトを返します。

Calendar の getTime メソッドは、ミリ秒時刻を取得するのではなく、対応する Date オブジェクトを取得します。

import java.util.Calendar;
import java.util.Date;

public class Demo {
    
    
    public static void main(String[] args) {
    
    
        Calendar cal = Calendar.getInstance();
        Date date = cal.getTime();
        System.out.println(date); 
    }
}
Sun Sep 20 08:44:18 CST 2020

チップ:

西洋の週は日曜日 (1) と月曜日 (2) に始まり、中国の週は月曜日に始まるため、-1 を使用できます。

Calendar クラスでは、月は 1 月から 12 月を表す 0 ~ 11 で表されます (+1 を使用できます)。

日付はサイズに関係しており、時間が遅いほど時間は大きくなります。

おすすめ

転載: blog.csdn.net/sc179/article/details/108687144