Получение NSDate через NSDateFormatter из строки неизвестного формата - PullRequest
2 голосов
/ 09 февраля 2012

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

Из всех вопросов здесь о SO я пришел к выводу, что -[NSDateFormatter dateFromString:] всегда будет возвращать NULL, если ваш объект форматирования нене иметь правильный формат даты.Как вы получаете дату из строки, если вы не знаете формат?Я пытаюсь получить дату от UITextField.

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[NSLocale currentLocale]];
[formatter setLenient:YES];
NSDate *tempDate = [formatter dateFromString:self.birthdayTxtfld.text];
self.currentCustomer.birthday = ([self.birthdayTxtfld.text isEqualToString:@""]) ? NULL : tempDate;
[formatter release];

tempDate всегда NULL.

Ответы [ 2 ]

3 голосов
/ 09 февраля 2012

Я думаю, что вы выбрали неправильный подход.С другой стороны, я бы ограничил и отформатировал UITextField, чтобы пользователь вводил дату в определенном формате.Или просто используйте сборщик дат.Также есть различные способы ввода данных пользователем.

Или вы можете прочитать это: NSDate

Другой вариант - создать список принятых датформаты: #define DATEFORMATS @[@"MM/dd/yyyy", @"MM/dd/yy",... Затем предложите метод, которому вы передадите строку даты, и проверьте, можете ли вы отформатировать ее:

+ (NSDateFormatter*)getDateFormat:(NSString*)dateString {

    NSArray *dateFormats = DATEFORMATS;
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    NSDate *date = nil;
    for (NSString *dateFormat in dateFormats) {
        [formatter setDateFormat:dateFormat];
        date = [formatter dateFromString:dateString];
        if (date) {
            return formatter;
        }
    }
    return nil;
}

Если вы получите ноль, то это не дата или формат, который вы не делаетеслужба поддержки.В противном случае у вас будет правильный формат, который вам нужен.Вы можете переключить это, чтобы вернуть дату вместо формата.У меня так, потому что мне нужен формат, а не дата для проекта.

1 голос
/ 09 февраля 2012

Хотя я и согласен с @Jaybit, что вам, вероятно, нужно отбросить текстовое поле и использовать более качественные входные данные, ответ на этот конкретный вопрос заключается в некотором хитром разборе строк. Когда бы вы ни занимались разбором строк, RegEx - ваш друг. Веб-разработчикам приходится постоянно делать это дерьмо. Этот пример написан на JavaScript, но RegEx должен быть достаточно переносимым, чтобы работать в ObjC:

http://www.codingoptimist.com/2009/07/using-javascript-and-regex-to-parse.html

Вы можете сделать это с помощью RegExKit или NSRegularExpression

...