2013-09-03 14 views
6

Ho una NSString e devo verificare che sia in questo formato specifico MM/GG/AA. Quindi ho bisogno di convertirlo in un NSDate. Qualsiasi aiuto su questo sarebbe molto apprezzato. Sidenote - Ho cercato in giro e la gente suggerisce di usare RegEx, non l'ho mai usato e di solito non lo so. Qualcuno può indicarmi una buona risorsa/spiegazione.Controllare NSString per il formato data specifico

risposta

6

Utilizzare uno NSDateFormatter per entrambe le attività. Se riesci a convertire la stringa in una data, allora è nel formato corretto (e hai già il risultato).

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) 

Così saprete quando non è formattato correttamente se l'NSDate è zero. Ecco il link ai documenti se hai bisogno di ulteriori informazioni: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html#//apple_ref/doc/uid/TP40002369-SW1

+0

@lnafziger ha ragione. Assicurati di tenerlo a mente se usi qualcosa di simile a quello che ho messo sopra. –

2

So che questa è una risposta tardiva, ma è impossibile garantire sempre che una stringa sia in questo particolare formato di data.

Un formattatore di date, un regex o anche un essere umano non può verificare determinate date, perché non sappiamo se l'utente sta digitando "mm/GG/aa" o "GG/mm/aa". In alcuni luoghi è comune inserire prima il giorno del mese, mentre in altre aree si inserisce prima il mese. Quindi se entrano "09/06/2013" significano "6 settembre" o "9 giugno"?

2

Ecco una semplice funzione per chiunque cerchi una soluzione semplice.

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

È necessario modificare il formattatore di seguito per abbinare la formattazione utilizzata dalla data.

[dateFormatter setDateFormat:@"yyyy-MM-dd"];