私はこのようなISO-8601の日付文字列を持っています:"2017-02-07T00:00:00-08:00"
。DateオブジェクトからTimeZoneを抽出するには?
この日付からTimeZoneオブジェクトを抽出するにはどうすればよいですか?
私はこのようなISO-8601の日付文字列を持っています:"2017-02-07T00:00:00-08:00"
。DateオブジェクトからTimeZoneを抽出するには?
この日付からTimeZoneオブジェクトを抽出するにはどうすればよいですか?
以下のようなタイムゾーンのみを返す日付フォーマッタを作成することができます。省略名を探している時間帯に変更します。
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)
}
残念ながら、DateFormatter
はあなたがDate
を望んでいないにもそれが解析された日付文字列についてのタイムゾーン情報に関するあらゆる情報を提供しないので、何の助けではありません。 TimeZone
には、タイムゾーンオフセット文字列を解析できる初期化子がありません。
あなたは自分で作業を行う必要があります。固定フォーマットの日付文字列があるので、タイムゾーンオフセットは常に文字列の最後の6文字になることがわかります。最後の2つは分数で、最初の3つは時間を表します(記号を含む)。
日付文字列からこれら2つの部分文字列(時間と分)を抽出します。それらを両方ともInt
に変換します。次に、オフセットを秒単位で計算する簡単な計算を行います(時間* 3600 +分* 60)。
オフセットを秒単位で設定したら、init(secondsFromGMT:)
イニシャライザを使用してTimeZone
インスタンスを作成できます。
'Date'オブジェクトにはタイムゾーンはありません。あなたが実際に望むものを明確にしてください。 – rmaddy
私は質問を更新しました。 – TruMan1
タイムゾーンがありません。 UTCからのオフセットがあります。 [timezone tag wiki](http://stackoverflow.com/tags/timezone/info)の「time zone!= offset」を参照してください。 –