2017-02-08 5 views
0

私はこのようなISO-8601の日付文字列を持っています:"2017-02-07T00:00:00-08:00"DateオブジェクトからTimeZoneを抽出するには?

この日付からTimeZoneオブジェクトを抽出するにはどうすればよいですか?

+0

'Date'オブジェクトにはタイムゾーンはありません。あなたが実際に望むものを明確にしてください。 – rmaddy

+0

私は質問を更新しました。 – TruMan1

+0

タイムゾーンがありません。 UTCからのオフセットがあります。 [timezone tag wiki](http://stackoverflow.com/tags/timezone/info)の「time zone!= offset」を参照してください。 –

答えて

-1

以下のようなタイムゾーンのみを返す日付フォーマッタを作成することができます。省略名を探している時間帯に変更します。

let timeZoneOnlyDateFormatter: DateFormatter = { 
    let formatter = DateFormatter() 
    formatter.timeZone = TimeZone(abbreviation: "UTC") 
    formatter.dateStyle = .none 
    formatter.timeStyle = .none 
    return formatter 
}() 

これらの関数を使用して文字列に変換するか、文字列を日付に変換します。

func formatDateIntoString(date: Date, dateFormatter: DateFormatter) -> String { 
    return dateFormatter.string(from: date) 
} 


func formatStringIntoDate(string: String, dateFormatter: DateFormatter) -> Date! { 
    return dateFormatter.date(from: string) 
} 
3

残念ながら、DateFormatterはあなたがDateを望んでいないにもそれが解析された日付文字列についてのタイムゾーン情報に関するあらゆる情報を提供しないので、何の助けではありません。 TimeZoneには、タイムゾーンオフセット文字列を解析できる初期化子がありません。

あなたは自分で作業を行う必要があります。固定フォーマットの日付文字列があるので、タイムゾーンオフセットは常に文字列の最後の6文字になることがわかります。最後の2つは分数で、最初の3つは時間を表します(記号を含む)。

日付文字列からこれら2つの部分文字列(時間と分)を抽出します。それらを両方ともIntに変換します。次に、オフセットを秒単位で計算する簡単な計算を行います(時間* 3600 +分* 60)。

オフセットを秒単位で設定したら、init(secondsFromGMT:)イニシャライザを使用してTimeZoneインスタンスを作成できます。

関連する問題