【Java入門】日付を取得する方法（Date,Calendar,GregorianCalendar)

# Dateクラスで現在日時を取得する

### Dateクラスとは
　現在日時の取得ができます。
　new演算子で初期化できます。

### Dateクラスの使い方
　new演算子で初期化できます。
　コンストラクタによって現在日時（年月日、曜日、時間）で初期化します。


```java:Dateクラス
import java.util.Date;

public class Main {
	public static void main(String[] args) {

		// Dateクラスを生成 
		Date date = new Date();

		// 現在の日時を出力 
		System.out.println(date);

	}
}
```
```:実行結果
Sat Sep 30 16:41:26 JST 2023
```

# Calendarクラスで現在日時を取得する

### Calendarクラスとは

　現在日時の取得に加えて日付の計算、日付の指定ができます。
　抽象クラスであるため、new演算子で初期化ができません。

### Calendarクラスの使い方

　`Calendar.getInstance()`で現在日時のカレンダーを取得します。
　クラスメソッドであり、コンピューターの設定に合わせて適切なカレンダーを取得する機能です。
　また現在日時を出力するには、`getTime()`メソッドを使います。

```java:Calendarクラス
import java.util.Calendar;

public class Main {
	public static void main(String[] args) {

		// Calendarクラスを生成
		Calendar cl = Calendar.getInstance();

		// 現在の日時を出力
		System.out.println(cl.getTime());

	}
}
```
```:実行結果
Sat Sep 30 16:41:26 JST 2023
```

# GregorianCalendarクラスで現在日時を取得する

### GregorianCalendarクラスとは

　Calendarを継承しているため、Calendarのメソッドが使えます。グレゴリオ暦でカレンダーを取得します。Calendarクラスの`Calendar.getInstance()`でカレンダーを取得した時、主にGregorianCalendarクラスが入っています。

### GregorianCalendarクラスの使い方

　new演算子で初期化できます。
　コンストラクタによって現在日時（年月日、曜日、時間）で初期化します。
　コンストラクタの引数（年,月,日）を指定することで指定した値で初期化できます。

```java:GregorianCalendarクラス
import java.util.GregorianCalendar;

public class Main {
	public static void main(String[] args) {

		// GregorianCalendarクラスを生成
		GregorianCalendar gc = new GregorianCalendar();

		// 現在の日時を出力
		System.out.println(gc.getTime());


        // 引数を指定して初期化
		GregorianCalendar gc2 = new GregorianCalendar(2019,1,12);
		
		// 指定したカレンダーを出力
		System.out.println(gc2.getTime());

	}
}
```
```:実行結果
Sat Sep 30 16:41:26 JST 2023
Tue Feb 12 00:00:00 JST 2019
```

# DateとCalendarの変換方法
 
### CalendarからDateに変換

　Calendar型からDate型へ変換する場合は、Calendar型の変数に対して、`getTime`メソッドで現在時刻を取得し、Date型の変数に設定すれば変換できます。

```java:Calender⇒Dateクラス
import java.util.Calendar;
import java.util.Date;

public class Main {
	public static void main(String[] args) {
		
		// DateクラスとCalendarクラスの生成
		Calendar cl = Calendar.getInstance();
		Date date = new Date();
		
		// Calendarクラスの現在日時を代入
		date = cl.getTime();
		System.out.println(date);
	}
}
```

### DateからCalendarに変換

　Date型からCalendar型へ変換する場合は、日時を設定する`setTime`メソッドを使用します。`setTime()`の引数にDate型の変数を指定すれば、Calendar型へ変換することができます。

```java:Date⇒Calendarクラス
import java.util.Calendar;
import java.util.Date;

public class Main {
	public static void main(String[] args) {
		
		// DateクラスとCalendarクラスの生成
		Date date = new Date();
		Calendar cl = Calendar.getInstance();
		
		// CalendarクラスのsetTimeメソッドでDate型の変数を指定する
		cl.setTime(date);
		System.out.println(cl.getTime());
	}
}
```

# Stringにカレンダークラスを変換
 
### DateからStringへの変換

　Dateの値をStringへ変換する場合は、`valueOf`メソッドを使用します。
　`valueOf`メソッドの引数に、Dateの値を指定します。

<details><summary>valueOfメソッドとは</summary>
　valueOfメソッドは引数に指定したさまざまな型の値を、String型の文字列として返します。
このメソッドはオーバーロードされており、Date型（Object）の他にshort型、int型、long型、float型、double型など引数に指定し、簡単にString型に変換することができます。

</details>

```java:Date⇒String型
import java.util.Date;

public class Main {
	public static void main(String[] args) {
		
		// Dateクラスの生成とvalueOfメソッドで変換
		Date date = new Date();
		String str = String.valueOf(date);
		
		
		// 現在日時の出力
		System.out.println(str);
	}
}
```

### CalendarからStringへの変換

　基本的にDateの時と同じです。`valueOf`メソッドの引数に`getTime`メソッドで取得した現在日時を指定し、変換します。

```java:Calendar⇒String型
import java.util.Calendar;

public class Main {
	public static void main(String[] args) {
		
		// Calendarクラスの生成とvalueOfメソッドで変換
		Calendar cl = Calendar.getInstance();
		String str = String.valueOf(cl.getTime());
		
		// 現在日時の出力
		System.out.println(str);
	}
}
```