【发布时间】:2015-05-22 17:26:24
【问题描述】:
我有一个 iOS 应用程序。该应用程序的其中一个部分显示了特定位置的简单小天气预报。作为此预测的一部分,该应用程序还显示了一些图像。这些图像要么是基于白天的,在这种情况下它们将具有“太阳”图像,要么是基于夜晚的,在这种情况下它们将具有“月亮图标”。
不管怎样,我想出了一个“笨拙”的小方法,可以判断是早上/下午还是晚上。 (这也是季节的因素)。
但是我不确定这是否有好处,如果有官方方法可以解决这个问题,我正在徘徊?也许有一些Apple API?解决我的问题的更好方法是什么?这是我的代码:
注意:确保你滚动浏览我的代码,有很多。
NSDateComponents *component = [[NSCalendar currentCalendar] components:(NSCalendarUnitMonth | NSCalendarUnitHour) fromDate:[NSDate date]];
NSInteger hours = [component hour];
NSInteger month = [component month];
NSLog(@"\n\nHOUR IS: %ld", (long)hours);
NSLog(@"MONTH IS: %ld", (long)month);
NSInteger eveningHour = 0;
switch (month) {
case 12: case 1: case 2:
// It is winter time... so days are very short.
// December, January, February.
eveningHour = 16;
break;
case 3: case 4: case 5:
// Its spring time... days are getting a bit longer.
// March, April, May.
eveningHour = 17;
break;
case 6: case 7: case 8:
// Its summer time... so days are longer.
// June, July, August.
eveningHour = 20;
break;
case 9: case 10: case 11:
// Its fall (autumn)... days are getting shorter.
// September, October, November.
eveningHour = 17;
break;
default: break;
}
if ((hours >= 0) && (hours < 12)) {
// Morning...
// Display normal sun icon.
NSLog(@"Morning");
}
else if ((hours >= 12) && (hours < eveningHour)) {
// Afternoon...
// Display normal sun icon.
NSLog(@"Afternoon");
}
else if ((hours >= eveningHour) && (hours <= 24)) {
// Evening/Night...
// Display moon icon.
NSLog(@"Evening");
}
感谢您抽出宝贵时间,丹。
【问题讨论】:
-
你的逻辑只适用于一定的纬度范围。没有“标准 API”来确定白天和黑夜。为什么不根据给定位置的实际日出和日落时间来计算呢?
-
@rmaddy 大概是因为他不知道如何获取给定位置的实际日出和日落时间...
-
说一月份的下午 4 点天黑会让南半球的用户感到困惑。
-
@rmaddy urrmm 你确定吗?我现在继续使用 OpenWeatherMap APi,并记下了它为英国伦敦提供的日出和日落时间。上面写着 3:59 AM(日出)和 7:55 PM(日落)。当然,如果当前时间是在这两个时间之间,那么它是白天时间吗?对吗??
标签: ios objective-c time nsdate nscalendar