是否有一个Objective-C(或C)库(与核心位置兼容)可以告诉我任何特定日历日的日出和日落时间?
答案 0 :(得分:23)
EDSunriseSet是一个开源的免费Objective-C包装器,用于Paul Schlyter创建的C语言例程。
计算完全由C代码例程完成。 EDSunrisetSet将这些计算桥接到常见的Cocoa类(NSDate,NSTimeZone,...)
答案 1 :(得分:8)
我实际上移植了KosherJava Library并计划很快在GitHub上提供它!
修改强>
KosherCocoa现在正在GitHub上播放!如果您不需要希伯来语日历相关代码,则可以删除“日历”文件。类文件根据它们的计算类型很好地分成文件夹。
编辑:KosherCocoa我们将尽快更新现代更完整的更新。以上链接现在指向旧版回购。
答案 2 :(得分:6)
我使用了一个名为SUNWAIT的库。非常简单,有效 - 易于使用!
答案 3 :(得分:4)
试试这个:https://github.com/mourner/suncalc/
非常清晰,易于实现,虽然它是用javascript编写的,但很容易将其转换为
目标C
它还支持计算太阳,月亮位置和坐标。
答案 4 :(得分:2)
在找不到简单的Swift替代品后,我创建了Solar:一个Swift构建的日出/日落微库。
答案 5 :(得分:1)
只是一个注释..如果你使用Berkley ......那么它不起作用(至少在澳大利亚)。 它确实包括Paul Schlyter C代码,这很棒。
如果您希望它在任何地方工作,最好只计算UTC中的日期。
在SunriseAndSunset.m中,替换来自的代码 双升; 双重; 如下:
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];
答案 6 :(得分:0)