swift nsdate给出了错误的输出

时间:2016-08-23 08:41:47

标签: 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.dateFromString("2016-09-07")!

print(start_date)
print(end_date)

输出

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

2 个答案:

答案 0 :(得分: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")!

这解决了我的问题。

答案 1 :(得分: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)!
    }
}