2017-04-27 94 views
-1
 let dateFormatter = DateFormatter() 
     let dateFormatter2 = DateFormatter() 

     dateFormatter.timeZone = TimeZone(abbreviation: "UTC") 

     dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" 

     let date = dateFormatter.date(from: event!) 

     dateFormatter2.timeZone = TimeZone.current 
     let dateString = dateFormatter2.string(from: date!) 

     let finalDate = dateFormatter2.date(from: dateString) 
     return finalDate! 

我有體育賽事給了我UTC的字符串日期,我試圖將其轉換爲當地時間。這個代碼與本網站提供的幾十個示例類似,當問這個問題時,它卻不起作用。爲什麼不從UTC到本地代碼的轉換工作?

+0

添加的時間差,很有可能你是什麼事件的格式。 –

+2

什麼是輸入和實際和預期輸出?爲什麼要轉換String - > Date - > String - > Date?請注意,「日期」描述了絕對時間點,**沒有時區**。 –

+0

@丹尼爾不,不要在格式化程序中引用'Z'。 – rmaddy

回答

1

這是ISO8601格式:

static let iso8601: DateFormatter = { 
    let formatter = DateFormatter() 
    formatter.calendar = Calendar(identifier: .iso8601) 
    formatter.locale = Locale(identifier: "en_US_POSIX") 
    formatter.timeZone = TimeZone(secondsFromGMT: 0) 
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" 
    return formatter 
}() 

這將您的字符串轉換成Date

您將需要通過TimeZone.autoupdatingCurrent

+0

你能解釋我如何添加時差?在我從字符串中提取日期之後,還是之前執行此操作? –

+0

那麼你可以先在我給你展示的代碼中將時區更改爲TimeZone.autoUpdatingCurrent,然後添加TimeZone.autoUpdatingCurrent.daylightSavingsTimeOffset() – SeanLintern88