6 votes

Vérifier NSString pour un format de date spécifique

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 ?

7voto

Dylan Bettermann Points 703
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

6voto

Wain Points 65967

Utiliser un NSDateFormatter pour les deux tâches. Si vous pouvez convertir la chaîne en date, le format est correct (et vous avez déjà le résultat).

2voto

lnafziger Points 18241

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" ?

2voto

MGM Points 957

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"];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X