Ios swift nsdate给出错误的输出

Ios swift nsdate给出错误的输出,ios,swift,nsdate,nsdateformatter,Ios,Swift,Nsdate,Nsdateformatter,一个简单的代码,用于将字符串日期转换为NSDate。但不知道为什么它返回实际日期-1 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

一个简单的代码,用于将字符串日期转换为NSDate。但不知道为什么它返回实际日期-1

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

我以前也遇到过类似的问题。我想这和你的时区有关。经过一番尝试,我做到了这一点,它不知怎么地起了作用

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)!
    }
}

您需要将
日期格式中的时区设置为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")!

这已经解决了我的问题

我发现你和清扫者的答案都很有用,现在给我正确的输出。那么NSDateFormatter()的默认时区swift分配是什么呢?我认为这是您的本地时区@Manishjain,这将产生新的问题。NSDate存储在UTC中,而nsdateformatter考虑当前时区。使用此代码,您可以将日期更改为5:30。