19

是否有一个 Objective-C(或 C)库(与核心位置兼容)可以告诉我任何给定日历日的日出和日落时间?

4

7 回答 7

23

EDSunriseSet是一个开源和免费的 Objective-C 包装器,用于由Paul Schlyter创建的 C 语言例程。

计算完全由 C 代码例程完成。EDSunrisetSet 将这些计算连接到常见的 Cocoa 类(NSDate、NSTimeZone、...)

于 2012-03-19T10:27:30.773 回答
8

我实际上已经移植了KosherJava 库,并计划很快在 GitHub 上提供它!

编辑:

KosherCocoa现已在 GitHub 上上线!如果不需要希伯来日历相关代码,可以删除“日历”文件。类文件根据它们所做的计算类型很好地分隔到文件夹中。

编辑:KosherCocoa 我们将尽快被现代和更完整的更新所取代。上面的链接现在指向一个遗留回购。

于 2011-04-17T03:59:13.433 回答
6

我使用了一个名为SUNWAIT的库。非常简单,有效 - 易于使用!

于 2010-11-05T01:43:03.000 回答
4

试试这个:https ://github.com/mourner/suncalc/

非常清晰易实现,虽然它是用javascript编写的,但是很容易将其转换为
objective-C

它还支持计算太阳、月亮的位置和坐标。

于 2013-03-23T14:12:48.983 回答
2

在没有找到简单的 Swift 替代方案后,我创建了Solar:一个 Swift 为 Sunrise / Sunset 构建的微型库。

于 2016-04-14T10:57:21.763 回答
1

请注意……如果您使用伯克利的……那么它不起作用(至少在澳大利亚)。它确实包含 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];
于 2012-08-15T02:37:08.040 回答
0

试试这个:https ://github.com/berkley/ObjectiveCUtil

于 2012-07-30T14:07:34.853 回答