Time 根据时间改变背景-目标C
所以我想做的是根据一天中的时间改变图像的背景,但是它遇到了一个问题。代码如下:Time 根据时间改变背景-目标C,time,background,compare,nsdate,nscalendar,Time,Background,Compare,Nsdate,Nscalendar,所以我想做的是根据一天中的时间改变图像的背景,但是它遇到了一个问题。代码如下: -(void)updateBackground { NSDate *currentTime = [NSDate date]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"hh:mm a"]; [dateFormatter setTimeSt
-(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];
}
}
}
所以问题是,假设现在是晚上11点54分,但它一直说现在是早上5点以后11点59分之前!这不是选择正确的if语句!我该怎么办?NSDate格式以24小时格式提供时间,因此您必须更改时间,如(上午1:00,下午13:00),以便根据需要设置条件。这可能对您有所帮助
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");
}
您应该使用NSDate组件仅获取正在比较的NSDate对象的小时和分钟数。请参阅NSDateComponents的官方文档,了解如何使用它
然后使用以下方法之一比较NSDate对象:
- (NSDate *)earlierDate:(NSDate *)anotherDate
- (NSDate *)laterDate:(NSDate *)anotherDate
- (BOOL)isEqualToDate:(NSDate *)anotherDate
比较日期时不应使用NSString。您正在比较字符串。你真的应该比较NSDate对象。@Johankarsson你能给我一个类似于我的链接吗?对不起,我没有这类代码的链接。我写了一个答案;-)它不包含完整的源代码,而是关于如何实现您正在寻找的内容的提示。请选择首选答案。感谢@balu的努力和反馈,但它仍然让我一直到下午12:55在我写作的地方it@sunnyChopper:12:55表示下午,所以我们必须用PM代替AM,这样你就可以得到你想要的任何东西。@sunnyChopper:很抱歉,12:55 AM,在NSDate格式中,它给出的是00:55 AM,所以,通过这种方式,您得到了正确的结果。您应该真正尝试您的代码,或者知道它正在工作。“可能是”不起作用。