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
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).
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
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"?
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"];
@lnafziger ma rację. Pamiętaj o tym, jeśli używasz czegoś podobnego do tego, co umieściłem powyżej. –