【Java】日付型変換

#やりたいこと
 - 頻繁に使う下記5つの型の変換方法を記載
   - String
   - java.util.Date
   - java.sql.Date
   - LocalDate
   - LocalDateTime





# String
### -> java.util.Date
```java
    //  変換 : SimpleDateFormat
    //  例外 : ParseException
    SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
    date = format.parse("2019/04/01");
```

### -> java.sql.Date
```java
    // 変換 : なし
    // 例外 : なし
    // 区切り文字は「ハイフン(-)のみ許容」
　　java.sql.Date sqlDate= java.sql.Date.valueOf("2019-04-01");
```

### -> LocalDate
```java
    // 変換 : DateTimeFormatter
    // 例外 : なし (DateTimeParseException) 
    LocalDate.parse("2019/4/1", DateTimeFormatter.ofPattern("yyyy/MM/dd"));　// 0埋め必須 (例外発生)
    LocalDate.parse("2019/4/1", DateTimeFormatter.ofPattern("yyyy/M/d")) ;   // 0埋め不要
```

### -> LocalDateTime
```java
    // 変換 : DateTimeFormatter
    // 例外 : なし (DateTimeParseException)
    LocalDateTime.parse("2019/04/01", DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"));
```





# java.util.Date
### -> String
```java
    // 変換 : SimpleDateFormat 
    // 例外 : なし
    SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
    format.format(new Date());
```

### -> java.sql.Date
```java
    // 変換 : なし
    // 例外 : なし
    // ポイント : いったんミリ秒 (エポック時間:1970年からの経過時間を引数にする。)
    java.sql.Date sqlDate = new java.sql.Date(new java.util.Date().getTime());
```

### -> LocalDate
```java
    // 変換 : Instant, ZoneDateTime
    // 例外 : なし
    Date date = new Date();
    LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
```

### -> LocalDateTime
```java
    // 変換 : Instant, ZoneDateTime
    // 例外 : なし
    LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
```





# java.sql.Date
### -> String
```java
    // 変換 - 
    // 例外 - 
    java.sql.Date date = java.sql.Date.valueOf("2019-04-01");
    String strDate = date.toString();
```

### -> java.util.Date
```java
    ★明日書きます。
```

### -> LocalDate
```java
 ★明日書きます。
```

### -> LocalDateTime
```java
 ★明日書きます。
```


# LocalDate

### -> String
```java
    // 変換 : DateTimeFormatter
    // 例外 : なし
    LocalDate localDate = LocalDate.of(2019, 04, 01);
    String strDate = localDate.format(DateTimeFormatter.ofPattern("yyyy/MM/dd"));
```

### -> java.util.Date
```java
    // 変換 : SimpleDateFormat
    // 例外 : ParseException
    // ポイント : LocalDate -> String -> Date
　　localDate = LocalDate.of(2019, 04, 01);
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    date = format.parse(localDate.toString());
```

### -> java.sql.Date
```java
    // 変換 : -
    // 例外 : -
    LocalDate localDate = LocalDate.of(2019, 04, 01);
    java.sql.Date sqlDate = java.sql.Date.valueOf(localDate);
```

### -> LocalDateTime
```java
    // 変換 : -
    // 例外 : -
    // ポイント : 時分秒は00:00:00
    LocalDate localDate = LocalDate.of(2019, 04, 01);    
    LocalDateTime localDateTime = localDate.atStartOfDay();
```


# LocalDateTime

###  -> String
```java
    // 変換 : DateTimeFormatter
    // 例外 : -
    LocalDateTime localDate = LocalDateTime.of(2019, 04, 01, 23, 59, 58);
    String strDate = localDate.format(DateTimeFormatter.ofPattern("yyyy/MM/dd hh:mm:ss"));
```

###  -> java.util.Date
```java
    // 変換 : LocalDateTime -> ZonedDateTime -> Instant -> Date
    // 例外 -
    LocalDateTime localDateTime = LocalDateTime.of(2019, 04, 01, 23, 59, 58);
    Date date = Date.from(ZonedDateTime.of(localDateTime, ZoneId.systemDefault()).toInstant());
```

###  -> java.sql.Date
```java
    // 変換 : LocalDateTime -> LocalDate -> sql.Date
    // 例外 : -
    LocalDateTime localDateTime = LocalDateTime.of(2019, 04, 01, 23, 59, 58);
    java.sql.Date sqlDate = java.sql.Date.valueOf(localDateTime.toLocalDate());
```

###  -> LocalDate
```java
    // 変換 : -
    // 例外 : -
    LocalDateTime localDateTime = LocalDateTime.of(2019, 04, 01, 23, 59, 58);
    LocalDate localDate = localDateTime.toLocalDate();
```

#参考サイト
- Sting -> java.sql.Date
https://www.sejuku.net/blog/19077#StringSQLDate

- String -> LocalDateTime
https://qiita.com/riekure/items/d83d4ea5d8a19a267453

- java.util.Date -> LocalDate
https://qiita.com/hryshtk/items/43991beaabbb9d587360

- LocalDate -> java.sql.Date
https://code-examples.net/ja/q/15ddf55