2015-05-25 2 views
3

Я понимаю, как использовать NSDateFormatter, чтобы преобразовать компонент месяца в длинную строку имени, но как преобразовать имя месяца в int?Преобразование длинного имени месяца в int

Я использую оператор switch для преобразования, но я думаю, что должен быть более простой способ.

Например, я хотел бы преобразовать «Май» до 5.

+1

Правильная процедура находится здесь: [Получить номер месяца от имени месяца] (http://stackoverflow.com/q/9114829), хотя он написан в ObjC. –

ответ

0

Использование MM для формата месяца. Используйте , чтобы преобразовать NSDate в String. Затем преобразовать строку в Int с .toInt()

let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "MM" 
let monthString = dateFormatter.stringFromDate(NSDate()) // "05" 
let monthInt = monthString.toInt() // 5 
3

Спасибо Джош. Я преобразовал код Obj-C и разместил его ниже для дальнейшего использования:

let calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian) 
let components = NSDateComponents() 
let formatter = NSDateFormatter() 
formatter.dateFormat = "MMMM" 
let aDate = formatter.dateFromString("May") 
let components1 = calendar!.components(.CalendarUnitMonth , fromDate: aDate!) 
let monthInt = components.month 
4
let df = NSDateFormatter() 
df.dateFormat = "LLLL" // if you need 3 letter month just use "LLL" 
if let date = df.dateFromString("May") { 
    let month = NSCalendar.currentCalendar().component(.CalendarUnitMonth, fromDate: date) 
    print(month) // 5 
} 
1

NSDateFormatter имеет monthSymbols property. Попытайтесь:

let formatter = NSDateFormatter() 
formatter.calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian) 

let monthString = "September" 
let month = find(formatter.monthSymbols as! [String], monthString).map { $0 + 1 } 
// -> Optional(9) 

let monthString2 = "Foobar" 
let month2 = find(formatter.monthSymbols as! [String], monthString2).map { $0 + 1 } 
// -> nil