Date型→String　String型→Date型を簡単に実装してくれるコード

SwiftのDate型をString型、String型→Date型に変換する方法
--


```Swift:日付.swift


class DateMethods {

     //String→Dateに変換する関数
    static func dateFromString(string: String, format: String) -> Date? {        
        //DateFormatter(）をインスタンス化
        let formatter: DateFormatter = DateFormatter()
        //formatterのカレンダーを西暦に設定する
        formatter.calendar = Calendar(identifier: .gregorian)
       //引数のformatを設定
        formatter.dateFormat = format
       //Date型に変換する
        let date = formatter.date(from: string)
        return date
    }
    
    //String→Dateに変換する関数
    static func stringFromDate(date: Date, format: String) -> String {
　　　　　　　　　　　　　　//仕組みは上と同じような感じ。
        let formatter: DateFormatter = DateFormatter()
        formatter.calendar = Calendar(identifier: .gregorian)
        formatter.dateFormat = format
        return formatter.string(from: date)
    }
    
    //現在の時刻をDate型で返す関数。
    static func getNow()->Date? {
         //現在の時刻をDate型で持ってくる。
        let dt = Date()
        let dateFormatter = DateFormatter()
         //dateformatterを設定する
        dateFormatter.dateFormat = "yyyy/MM/dd HH:mm:ss Z"
        //西暦に設定
        dateFormatter.calendar = Calendar(identifier: .gregorian)
        let datestring = dateFormatter.string(from: dt)
        let date = DateMethods.dateFromString(string: datestring, format: "yyyy/MM/dd HH:mm:ss Z")
        return date
    }
}
```

Dateの概要
--
4つで要素を理解している必要がある？と思う。
1 Calendar 時間の管理や計算等を行う。和暦や西暦の設定を変えたりできる
2 Locale  時間の軸となる場所を設定する
3 TimeZone　　そのまま、タイムゾーンを表す。GMTとの時差で時間を表す。
4 DateFormatter　どのような形でDate型を出すか決定する。ここで文字列にしたりする



Calendar
---
暦の設定

```swift
Calendar(identifier: .gregorian) //西暦
Calendar(identifier: .japanese) //和暦
その他いっぱいあるけどほぼ西暦つかう
```

日付の生成

```swift
//西暦に設定
var calendar = Calendar(identifier: .gregorian)
/// 日時を生成することができる（2021年9月18日 21:00:00）　→Date型で返ってくる
let date = calendar.date(from: DateComponents(year: 2021, month: 9, day: 18, hour: 21, minute: 0, second: 0))
//⑤時間⑮分後に設定
let resultDate1 = calendar.date(byAdding: DateComponents(ここにいっぱい.yearとか.monthかいっぱい引数あるよ,hour: 4, minute: 15), to: 基準となるDate型)
/// 前述をマイナスにするだけ
let resultDate2 = calendar.date(byAdding: DateComponents(day: -20), to: baseDate)
```

Calerndarで年,月,日,秒を撮ってくる

```swift
let formatter: DateFormatter = DateFormatter()
        formatter.calendar = Calendar(identifier: .gregorian)
          //.year .month .hour .second .minuteを第一引数に入れる
        let hour = formatter.calendar.component(第一引数, from: Date型を入れる。)
```

Locale
--
メジャーなLocaleのIdentifier
```
en_US（英語、米国地域）
ja_JP（日本語、日本地域）
ja_US（日本語、米国地域）
en_JP（英語、日本地域）
fr_FR（フランス語、フランス地域）
de_DE（ドイツ語、ドイツ地域）
zh_CN（中国語、中国地域）
```

```swift
/// 現在のLocale構造体の取得
let locale = Locale.current
/// Locale識別子の取得
let localeId = locale.identifier　　
print(localeId)　// →ja_JP
/// ロケール識別子を指定して生成
let locale = Locale(identifier: "ja_JP")
let formatter = DateFormatter()
formatter.locale = locale //ここでDateFormatterを設定する
```

TimeZone
--

標準時間をしめす構造体
あんまり使用しなそう。。しらんけど。

```swift
let timezone = TimeZone.current
print(timezone)        // "Asia/Tokyo (current)”→Iphoneで設定されているタイムゾーンがでてくる
 print(timezone.secondsFromGMT()) //　GMTによる時差を秒数出だしてくれる。
let timezone = TimeZone("Asia/Tokyo")　//タイムゾーンの生成
```

DateFormater
--
一番良く使うやつDateFormatter

変数フォーマット

```
"yyyy/MM/dd HH:mm:ss"
〇〇〇〇/〇〇/〇〇 〇〇:〇〇:〇〇
年　　　　　　　　　　　　月　　　　　　日付  　　時　　　　分　　　　秒
```

タイムスタイル,デイトスタイル

```
dateStyle
.none	出力無し	出力無し	出力無し
.short	4/24/20	2020/04/24	R2/04/24
.medium	Apr 24, 2020	2020/04/24	R2/04/24
.long	April 24, 2020	2020年4月24日	令和2年4月24日
.full	Friday, April 24, 2020	2020年4月24日 金曜　令和2年4月24日 金曜日

timeStyle
.none	出力無し	出力無し	出力無し
.short	2:23 PM	14:23	14:23
.medium	2:23:56 PM	14:23:56	14:23:56
.long	2:23:56 PM GMT+9	14:23:56 JST	14:23:56 JST
.full	2:23:56 PM Japan Standard Time	14時23分56秒 日本標準時	14時23分56秒 日本標準時
```

おまけ
--
FirebaseのTimeStamp型をDate型にする

```swift
let date = timestamp.dateValue()
print(date)
```
現在Dateを撮ってくる

```swift
let current = Date()
print(date)
```