【问题标题】:Objective-C Library for Sunrise and Sunset?日出和日落的 Objective-C 库?
【发布时间】:2011-05-05 09:51:00
【问题描述】:

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

【问题讨论】:

    标签: iphone objective-c ios libraries astronomy


    【解决方案1】:

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

    编辑:

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

    编辑:KosherCocoa 我们将尽快替换为现代且更完整的更新。上面的链接现在指向一个遗留回购。

    【讨论】:

    • 上面指向 KosherCocoa 的链接已经失效,但似乎还有几个副本在 github 中。 github.com/search?q=koshercocoa
    • 糟糕,我会尽快解决的!
    • @Cruinh - 我实际上正在对源代码进行现代化改造并编写单元测试。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 你在 Objective-C/for iOS 中使用过这个吗?另外,有入门教程吗?
      • 不 - 只是直接的 C。您可以将其编译为标准的“C”文件,然后调用它。 (这就是我在我的应用程序中所做的,但它不是 iPhone 应用程序)。
      • Brad - 我应该单独编译它还是将它包含在我的项目中并使用 API 调用?
      • 我最后一次使用它 - 我只是将它作为项目的一部分构建。这很简单。只需删除“主要”功能! ;-)
      • 我得到了一些奇怪的值。网上有没有关于如何使用的教程?
      【解决方案4】:

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

      非常清晰易实现,虽然是用javascript写的但是很容易转换成
      目标-C

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

      【讨论】:

        【解决方案5】:

        请注意..如果您使用 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];
        

        【讨论】:

        • 它可能在澳大利亚似乎不起作用,因为您获得了 GMT 时区的日期。我敢打赌,当您调试时,NSDate 中有 +0000 而不是 +1000。下次使用[date descriptionInLocale:[NSLocale currentLocale]] 调试日期。 :-)
        • 很难记住这么远,但我很确定情况并非如此,这更多地与代码中的假设有关,而不是对异常值进行测试。但无论如何,上面的工作很好,他们的例子为我节省了一些时间。所以这很好! :)
        • 啊,不用担心 :-) 我在澳大利亚使用它,所以我希望他们修复了错误。经过近一周的测试似乎可以工作。
        【解决方案6】:

        【讨论】:

          【解决方案7】:

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

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

          【讨论】:

          • 这个对我有用。它最近(2013 年 1 月)针对一些内存错误进行了更新,因此如果您正在使用它,请确保获得最新的代码。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-06-23
          • 1970-01-01
          • 2016-12-23
          • 1970-01-01
          • 2015-01-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多