代码:
let dateString = "2016-04-02" var formatter: NSDateFormatter = NSDateFormatter() formatter.timeZone = NSTimeZone(abbreviation: "GMT +3:00") formatter.dateFormat = "yyyy-MM-dd" println("dateString: \(dateString)") formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") let date = formatter.dateFromString(dateString) println("date: \(date)") formatter.dateFormat = "yyyy-MM-dd" let formattedDateString = formatter.stringFromDate(date!) println("formattedDateString: \(formattedDateString)")
输出:
dateString: 2016-04-02 date: Optional(2016-04-01 21:00:00 +0000) formattedDateString: 2016-04-02 2016-04-01 21:00:00 +0000
我正在尝试将字符串转换为NSDate数据类型,但没有获得正确的值。我尝试了许多解决方案,但未返回正确的值。我需要yyyy-MM- dd格式(2016-04-02)与我的输入“ 2016-04-02”相同。如果有人可以帮上忙,那真是太好了。提前致谢
从字符串转换为NSDate时,如果未将时区设置为格式化程序,则将获得本地时区中日期的NSDate。我想您的时区是GMT + 3。
然后,当您显示’date’的值(使用println,NSLog而不是NSDateFormatter)时,如果未设置时区,则将获得GMT + 0时间。这就是为什么您在3小时后到达。
根据如何使用NSDateFormatter,您将拥有所需的日期字符串。在您的情况下,它返回您想要的东西,不是吗?
请记住,NSDate会花点时间。
let dateString = "2016-04-02" let formatter = NSDateFormatter() formatter.dateFormat = "yyyy-MM-dd" println("dateString: \(dateString)") formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") let date = formatter.dateFromString(dateString) //without specify timezone, your dateString "2016-04-02" is your local time (GMT-3), //means it's 2016-04-02 00:00:000 at GMT+0. That is the value that NSDate holds. println("date: \(date)") //that why it show 2016-04-01 21:00:000, but not 2016-04-02 00:00:000 formatter.dateFormat = "yyyy-MM-dd" let formattedDateString = formatter.stringFromDate(date!) println("formattedDateString: \(formattedDateString)")