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
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).
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
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"?
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"];
@lnafziger ha ragione. Assicurati di tenerlo a mente se usi qualcosa di simile a quello che ho messo sopra. –