2016-08-23 67 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