2013-09-03 8 views
6

Mam NSString i muszę sprawdzić, czy jest w tym określonym formacie MM/DD/RR. Muszę następnie przekonwertować to na NSDate. Każda pomoc w tej sprawie byłaby bardzo doceniana. Sidenote - przeszukiwałem i ludzie sugerują używanie RegEx, nigdy nie korzystałem z tego i jestem niejasny na ten temat ogólnie. Czy ktoś może wskazać mi dobry zasób/wyjaśnienie.Sprawdź NSString dla określonego formatu daty

Odpowiedz

6

Dla obu zadań użyj NSDateFormatter. Jeśli możesz przekonwertować ciąg na datę, to jest on we właściwym formacie (i już masz wynik).

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) 

Dzięki temu będziesz wiedzieć, kiedy nie jest poprawnie sformatowany, jeśli NSDate jest zerowe. Oto link do dokumentów, jeśli potrzebujesz więcej informacji: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html#//apple_ref/doc/uid/TP40002369-SW1

+0

@lnafziger ma rację. Pamiętaj o tym, jeśli używasz czegoś podobnego do tego, co umieściłem powyżej. –

2

Wiem, że jest to odpowiedź spóźniona, ale nie można zawsze zagwarantować, że ciąg znaków jest w tym konkretnym formacie daty.

Formant daty, wyrażenie regularne, a nawet człowiek nie może zweryfikować niektórych dat, ponieważ nie wiemy, czy użytkownik wprowadza "mm/DD/rr" lub "DD/mm/rr". W niektórych miejscowościach często zdarza się, że najpierw rozpoczynasz dzień miesiąca, podczas gdy w innych obszarach najpierw wpisujesz miesiąc. Więc jeśli wpisują "09/06/2013", czy mają na myśli "6 września" lub "9 czerwca"?

2

Oto prosta funkcja dla każdego, kto szuka prostego rozwiązania.

- (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; 
    } 
} 

Należy zmienić formatownik poniżej, aby dopasować formatowanie używane przez datę.

[dateFormatter setDateFormat:@"yyyy-MM-dd"]; 
Powiązane problemy