time background compare nsdate nscalendar

time - Cambiar el fondo según el tiempo-Objetivo C



background compare (3)

Debe usar NSDateComponents para obtener solo las horas y los minutos de los objetos NSDate que está comparando. Consulte la documentación oficial de NSDateComponents para descubrir cómo usarlo.

Luego, compara los objetos NSDate usando uno de los siguientes métodos:

- (NSDate *)earlierDate:(NSDate *)anotherDate - (NSDate *)laterDate:(NSDate *)anotherDate - (BOOL)isEqualToDate:(NSDate *)anotherDate

Nunca debe usar NSString al comparar fechas.

Entonces, lo que trato de hacer es cambiar el fondo de una imagen de acuerdo con la hora del día, pero se está convirtiendo en un problema. Aquí está el código:

-(void)updateBackground { NSDate *currentTime = [NSDate date]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"hh:mm a"]; [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; NSString *resultTime = [dateFormatter stringFromDate:currentTime]; [timeLabel setText:resultTime]; NSString *morningStart = [NSString stringWithFormat:@"05:00 AM"]; NSString *morningEnd = [NSString stringWithFormat:@"11:59 AM"]; NSString *afternoonStart = [NSString stringWithFormat:@"12:00 PM"]; NSString *afternoonEnd = [NSString stringWithFormat:@"02:59 PM"]; NSString *eveningStart = [NSString stringWithFormat:@"03:00 PM"]; NSString *eveningEnd = [NSString stringWithFormat:@"07:59 PM"]; NSString *nightStart = [NSString stringWithFormat:@"08:00 PM"]; NSString *nightEnd = [NSString stringWithFormat:@"04:59 AM"]; NSLog(resultTime); if ([resultTime compare:morningStart]==NSOrderedDescending) { if ([resultTime compare:morningEnd]==NSOrderedAscending) { UIImage *morning = [UIImage imageNamed:@"MorningTime.jpeg"]; [background setImage:morning]; } } if ([resultTime compare:afternoonStart]==NSOrderedDescending) { if ([resultTime compare:afternoonEnd]==NSOrderedAscending) { UIImage *afternoon = [UIImage imageNamed:@"afternoonSky.jpeg"]; [background setImage:afternoon]; } } if ([resultTime compare:eveningStart]==NSOrderedDescending) { if ([resultTime compare:eveningEnd]==NSOrderedAscending) { UIImage *evening = [UIImage imageNamed:@"EveningSky.jpeg"]; [background setImage:evening]; } } if ([resultTime compare:nightStart]==NSOrderedDescending) { if ([resultTime compare:nightEnd]==NSOrderedAscending) { UIImage *night = [UIImage imageNamed:@"NightSky.jpeg"]; [background setImage:night]; } } }

Entonces, ¿cuál es el problema, digamos que son las 11:54 PM, pero sigue diciendo que es después de las 5:00 AM y antes de las 11:59 AM! ¡No está eligiendo la declaración correcta de if! ¿Qué debo hacer?


El formato NSDate da la hora en formato de 24 horas, por lo que debe cambiar la hora (01:00 a.m., 13:00 p.m.) para colocar las condiciones que desee.


puede ser que este te ayude,

NSDate *currentTime = [NSDate date]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"hh:mm a"]; [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; NSString *resultTime = [dateFormatter stringFromDate:currentTime]; NSString *morningStart = [NSString stringWithFormat:@"05:00 AM"]; NSString *morningEnd = [NSString stringWithFormat:@"11:59 AM"]; NSString *afternoonStart = [NSString stringWithFormat:@"12:00 PM"]; NSString *afternoonEnd = [NSString stringWithFormat:@"14:59 PM"]; NSString *eveningStart = [NSString stringWithFormat:@"15:00 PM"]; NSString *eveningEnd = [NSString stringWithFormat:@"19:59 PM"]; if ([morningStart compare:resultTime]==NSOrderedAscending & [resultTime compare:morningEnd]==NSOrderedAscending) { NSLog(@"morning"); } else if ([afternoonStart compare:resultTime]==NSOrderedAscending & [resultTime compare:afternoonEnd]==NSOrderedAscending) { NSLog(@"aftrnon..."); } else if ([eveningStart compare:resultTime]==NSOrderedAscending & [resultTime compare:eveningEnd]==NSOrderedAscending) { NSLog(@"evening"); } else { NSLog(@"nit time"); }