2013-09-03 5 views
6

У меня есть NSString, и мне нужно проверить, что он находится в определенном формате MM/DD/YY. Затем мне нужно преобразовать это в NSDate. Любая помощь по этому поводу будет высоко оценена. Sidenote - я обыскал вокруг, и люди предлагают использовать RegEx, я никогда не использовал это и не совсем понимаю его вообще. Может ли кто-нибудь указать мне хороший ресурс/объяснение.Проверьте NSString для определенного формата даты

ответ

6

Используйте обеими задачами NSDateFormatter. Если вы можете преобразовать строку в дату, она будет в правильном формате (и у вас уже есть результат).

7
NSString *strDate1 = @"02/09/13"; 
NSString *strDate2 = @"0123/234/234"; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"dd/MM/yy"]; 
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]]; 
NSDate *dateFormat1 = [dateFormatter dateFromString:strDate1]; 
NSDate *dateFormat2 = [dateFormatter dateFromString:strDate2]; 

NSLog(@"%@", dateFormat1); // prints 2013-09-02 00:00:00 +0000 
NSLog(@"%@", dateFormat2); // prints (null) 

Значит, вы будете знать, когда он не отформатирован правильно, если NSDate равен нулю. Вот ссылка на документы, если вам нужна дополнительная информация: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html#//apple_ref/doc/uid/TP40002369-SW1

+0

@lnafziger - это право. Обязательно помните об этом, если вы используете нечто похожее на то, что я поставил выше. –

2

Я знаю, что это поздний ответ, но невозможно всегда гарантировать, что строка находится в этом конкретном формате даты.

Форвард даты, регулярное выражение или даже человек не может проверить определенные даты, потому что мы не знаем, вводит ли пользователь «мм/DD/yy» или «DD/mm/yy». Обычно в некоторых местах сначала вводится день месяца, в то время как в других местах вы вводите месяц первым. Итак, если они входят в «09/06/2013», они означают «6 сентября» или «9 июня»?

2

Вот простая функция для тех, кто ищет простое решение.

- (BOOL) isTheStringDate: (NSString*) theString 
{ 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd"]; 
    NSDate *dateFromString = [[NSDate alloc] init]; 

    dateFromString = [dateFormatter dateFromString:theString]; 

    if (dateFromString !=nil) { 
     return true; 
    } 
    else { 
     return false; 
    } 
} 

Необходимо изменить форматтер, указанный ниже, чтобы соответствовать форматированию, используемому вашей датой.

[dateFormatter setDateFormat:@"yyyy-MM-dd"]; 
Смежные вопросы