是否有一个 Objective-C(或 C)库(与核心位置兼容)可以告诉我任何给定日历日的日出和日落时间?
7 回答
EDSunriseSet是一个开源和免费的 Objective-C 包装器,用于由Paul Schlyter创建的 C 语言例程。
计算完全由 C 代码例程完成。EDSunrisetSet 将这些计算连接到常见的 Cocoa 类(NSDate、NSTimeZone、...)
我实际上已经移植了KosherJava 库,并计划很快在 GitHub 上提供它!
编辑:
KosherCocoa现已在 GitHub 上上线!如果不需要希伯来日历相关代码,可以删除“日历”文件。类文件根据它们所做的计算类型很好地分隔到文件夹中。
编辑:KosherCocoa 我们将尽快被现代和更完整的更新所取代。上面的链接现在指向一个遗留回购。
我使用了一个名为SUNWAIT的库。非常简单,有效 - 易于使用!
试试这个:https ://github.com/mourner/suncalc/
非常清晰易实现,虽然它是用javascript编写的,但是很容易将其转换为
objective-C
它还支持计算太阳、月亮的位置和坐标。
在没有找到简单的 Swift 替代方案后,我创建了Solar:一个 Swift 为 Sunrise / Sunset 构建的微型库。
请注意……如果您使用伯克利的……那么它不起作用(至少在澳大利亚)。它确实包含 Paul Schlyter C 代码,这很棒。
如果您希望它在任何地方工作,最好只计算 UTC 日期。
在 SunriseAndSunset.m 中,替换 doublerise 中的代码;双组;如下:
sun_rise_set(theYear, theMonth, theDay, lon, lat, &rise, &set);
int hours = HOURS(rise);
int mins = MINUTES(rise);
int sethrs = HOURS(set);
int setmins = MINUTES(set);
NSTimeInterval riseOffset = ((hours * 60) + mins) * 60;
NSTimeInterval setOffset = ((sethrs * 60) + setmins) * 60;
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];
NSString *dateStr = [NSString stringWithFormat:@"%i-%02d-%02dT00:00:00+0000", theYear, theMonth, theDay];
NSDate *utcMidnight = [formatter dateFromString:dateStr];
NSDate *utcSunrise = [utcMidnight dateByAddingTimeInterval:riseOffset];
NSDate *utcSunset = [utcMidnight dateByAddingTimeInterval:setOffset];
[formatter release];
[gregorian release];
return [NSDictionary dictionaryWithObjectsAndKeys:utcSunrise, @"sunrise", utcSunset, @"sunset", nil];