Come verificare se una data particolare esiste?
-
25-10-2019 - |
Domanda
Come posso controllare se una data particolare esiste ?. Ad esempio, se faccio la seguente:
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
[dateComponents setYear:2011];
[dateComponents setMonth:2];
[dateComponents setDay:29];
NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:dateComponents];
[dateComponents release];
NSLog(@"date: %@", date);
Mi limito a ottenere 1 ° marzo. Non riesco a trovare una funzione che permette a questo, l'unico modo per farlo, è controllando dopo aver creato il NSDate se i componenti sono d'accordo con quello che ho ordinato
Soluzione
È possibile utilizzare il metodo -[NSDateFormatter dateFromString:]
:
+ (BOOL)dateExistsYear:(int)year month:(int)month day:(int)day
{
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
dateFormatter.dateFormat = @"yyyyMMdd";
NSString* inputString = [NSString stringWithFormat:@"%4d%2d%2d",
year,month,day];
NSDate *date = [dateFormatter dateFromString:inputString];
return nil != date;
}
Se si dà una data valida, allora dateFromString:
avrà successo, in caso contrario, verrà restituito nil
.
Altri suggerimenti
+(BOOL)dateExistsYear:(int)year month:(int)month day:(int)day{
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setYear:year];
[components setMonth:month];
[components setDay:day];
NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:components];
[components release];
components = [[NSCalendar currentCalendar] components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:date];
if([components year] != year || [components month] != month || [components day] != day){
return NO;
}
else{
return YES;
}
}
Ho controllato l'esistenza di tutti i giorni dal 1 ° gennaio 2000 al 12 dicembre 2012.
2011-04-28 11:42:57.130 Test[1543:903] interval 1.103822 // using the above function 2011-04-28 11:42:59.498 Test[1543:903] interval 2.367271 // using dateformatter
E 'ancora più veloce solo per controllare i componenti.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow