Search code examples
swiftnsdatensdateformatternscalendar

NSDate from String in Swift


I've got a string (eg. "2014-11-06 16:32:01") I want to turn this format into an NSDate object. Here's what I'm doing:

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
var date = dateFormatter.dateFromString("2014-11-06 16:32:01")!
var myCalendar:NSCalendar = NSCalendar(calendarIdentifier: NSGregorianCalendar)!
var myComponents = myCalendar.components(NSCalendarUnit.WeekdayOrdinalCalendarUnit, fromDate: date)
var year = myComponents.year
var month = myComponents.month
var day = myComponents.day

year, month, and day are each valued at 9223372036854775807. Am I getting the dateFormat wrong?


Solution

  • The date format is correct. But you have to specify all wanted units in the myCalendar.components(...) call. All other components are set to NSNotFound aka NSIntegerMax, which is 2^63 - 1 = 9223372036854775807 on the 64-bit architecture.

    This should work:

    var myComponents = myCalendar.components(.YearCalendarUnit | .MonthCalendarUnit | .DayCalendarUnit, fromDate: date)