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