Конвертировать длинное название месяца в int

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

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

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

4 ответа

Решение

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

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

Вы можете использовать пользовательский формат DateFormatter "LLLL" проанализировать вашу строку даты (месяц). Если вы анализируете даты только на английском языке, вы должны установить локаль форматирования даты на "en_US_POSIX":

let df = DateFormatter()
df.locale = Locale(identifier: "en_US_POSIX")
df.dateFormat = "LLLL"  // if you need 3 letter month just use "LLL"
if let date = df.date(from: "May") {
    let month = Calendar.current.component(.month, from: date)
    print(month)  // 5
}

Спасибо, Джош. Я преобразовал код 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

NSDateFormatter имеет monthSymbols собственность Пытаться:

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
Другие вопросы по тегам