J'ai un NSString et j'ai besoin de vérifier qu'il est dans ce format spécifique MM/DD/YYY. Je dois ensuite le convertir en NSDate. Toute aide à ce sujet serait très appréciée. Note complémentaire - J'ai fait des recherches et les gens suggèrent d'utiliser RegEx, mais je n'ai jamais utilisé cela et je ne sais pas trop ce que c'est en général. Quelqu'un peut-il m'indiquer une bonne ressource/explication ?
Réponses
Trop de publicités?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)
Vous saurez donc que le formatage n'est pas correct si la NSDate est nulle. Voici le lien vers la documentation si vous avez besoin de plus d'informations : https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html#//apple_ref/doc/uid/TP40002369-SW1
Je sais que cette réponse est tardive, mais il est impossible de toujours garantir qu'une chaîne de caractères est dans ce format de date particulier.
Un formateur de date, une expression rationnelle ou même un humain ne peut pas vérifier certaines dates, car nous ne savons pas si l'utilisateur saisit "mm/JJ/aa" ou "JJ/mm/aa". Dans certains endroits, il est courant de saisir le jour du mois en premier, alors que dans d'autres, c'est le mois qui est saisi en premier. Ainsi, si l'utilisateur saisit "09/06/2013", cela signifie-t-il "6 septembre" ou "9 juin" ?
Voici une fonction simple pour tous ceux qui recherchent une solution simple.
- (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;
}
}
Vous devez modifier le formatage ci-dessous pour qu'il corresponde au formatage utilisé par votre date.
[dateFormatter setDateFormat:@"yyyy-MM-dd"];