2016-08-23 84 views
2

一個簡單的代碼,用於將字符串日期轉換爲NSDate。但不知道爲什麼它返回當前日期 - 1個swift nsdate給出錯誤的輸出

var start_date: NSDate? 
var end_date: NSDate? 

let dateformatter = NSDateFormatter() 
dateformatter.dateFormat = "yyyy-MM-dd" 

start_date = dateformatter.dateFromString("2016-09-01")! 
end_date = dateformatter.dateFromString("2016-09-07")! 

print(start_date) 
print(end_date) 

輸出

2016-08-31 18:30:00 +0000 
2016-09-06 18:30:00 +0000 

回答

0

我以前遇到過類似的問題。我認爲這與你的時區有關。經過一番艱難的,我這樣做,它的工作在某種程度上...

let components = NSCalendar.currentCalendar().components([.Year, .Month, .Day], fromDate: yourDate) 
components.timeZone = NSTimeZone(name: "GMT") 
let correctDate = NSCalendar.currentCalendar().dateFromComponents(components)! 

基本上,切換時區GMT ...

我建議你創建一個擴展:

extension NSDate { 
    func switchToCorrectTimeZone() -> NSDate { 
     let components = NSCalendar.currentCalendar().components([.Year, .Month, .Day], fromDate: self) 
     components.timeZone = NSTimeZone(name: "GMT") 
     return NSCalendar.currentCalendar().dateFromComponents(components)! 
    } 
} 
1

你需要在你dateformat設置時區爲UTC

let dateformatter = NSDateFormatter() 
    dateformatter.dateFormat = "yyyy-MM-dd" 
    dateformatter.timeZone = NSTimeZone(name: "UTC") 

    start_date = dateformatter.dateFromString("2016-09-01")! 
    end_date = dateformatter.dateFromString("2016-09-07")! 

這有解決我的問題。

+0

我發現你和Sweeper的答案都很有用,現在給我正確的輸出。那麼NSDateFormatter()的默認TimeZone swift分配是什麼。 –

+0

我認爲這是你當地的時區@ManishJain – Sweeper

+1

這會產生新的問題。 NSDate存儲在UTC,而nsdateformatter考慮當前時區。使用此代碼,您將會將日期更改爲5:30關閉。 – vikingosegundo