2017-02-08 309 views
0

我有這樣的ISO-8601日期字符串:"2017-02-07T00:00:00-08:00"如何從Date對象中提取TimeZone?

如何從此日期提取TimeZone對象?

+0

「日期」對象中沒有時區。請澄清你真正想要的。 – rmaddy

+0

我已更新問題,thx。 – TruMan1

+0

您沒有時區。你有一個從UTC的偏移量。請參閱[時區標記wiki](http://stackoverflow.com/tags/timezone/info)中的「時區!=偏移量」。 –

回答

-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個是小時數(包括符號)。

從日期字符串中提取這兩個子字符串(小時和分鐘)。將它們轉換爲Int。然後做一些簡單的數學計算以秒爲單位的偏移量(小時* 3600 +分鐘* 60)。

一旦以秒爲單位獲得了該偏移量,就可以使用init(secondsFromGMT:)初始化程序創建一個TimeZone實例。