objective-c - 在 Objective C 中将公历日期转换为儒略日计数

标签 objective-c iphone nsdate gregorian-calendar julian-date

我需要 Objective C 方法将公历日期转换为儒略日,与此 PHP 方法 (GregorianToJD) 相同。

最佳答案

精度:将一天中的时间纳入儒略日期转换

这些 Julian 日期转换方法产生的结果与 U.S. Naval Observatory 相同 在线 Julian 日期转换器,比 NSDateFormatter 的 Julian 日期转换更精确。具体来说,下面的函数包含一天中的时间(例如小时、分钟和秒),而 NSDateFormatter 舍入到格林威治标准时间中午。

Swift 示例:

func jdFromDate(date : NSDate) -> Double {
    let JD_JAN_1_1970_0000GMT = 2440587.5
    return JD_JAN_1_1970_0000GMT + date.timeIntervalSince1970 / 86400
}

func dateFromJd(jd : Double) -> NSDate {
    let JD_JAN_1_1970_0000GMT = 2440587.5
    return  NSDate(timeIntervalSince1970: (jd - JD_JAN_1_1970_0000GMT) * 86400)
}

Objective-C 示例:

double jdFromDate(NSDate *date) {
   double JD_JAN_1_1970_0000GMT = 2440587.5;
   return JD_JAN_1_1970_0000GMT + date.timeIntervalSince1970 / 86400;
}

NSDate dataFromJd(double jd) {
   double JD_JAN_1_1970_0000GMT = 2440587.5;
   return [[NSDate alloc] initWithTimeIntervalSince1970: (jd - JD_JAN_1_1970_0000GMT) * 86400)];        
}

注意:研究证实 accepted answer将日期四舍五入为 24 小时间隔,因为它使用 NSDateFormatterg 格式说明符,返回 Modified Julian Day , 根据 UNICODE 标准的 Date Format Patterns Apple 的日期格式化 API 遵循(根据 Date Formatting Guide )。

关于objective-c - 在 Objective C 中将公历日期转换为儒略日计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22829680/

相关文章:

ios - 在 iOS 8.1.1 中 typecast BOOL 总是返回 false

ios - UIScrollView 中 subview 放错位置

iphone - 如何中止 iphone 中的异步 http 连接?

iOS - 更改 NSDate 格式使所有日期成为一月

iphone - 比较两个 NSDate 并忽略时间分量

ios - 转换 NSString->NSDate?

ios - 保存到核心数据时使用谓词防止数组中的重复条目

ios - 以编程方式创建了一个UIButton,但没有点击效果(仅文本效果)

Objective-C 属性 - getter 行为

iphone - 我怎么能创建一个类似于这个的自定义标签栏