我需要 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 小时间隔,因为它使用 NSDateFormatter
的 g
格式说明符,返回 Modified Julian Day , 根据 UNICODE 标准的 Date Format Patterns Apple 的日期格式化 API 遵循(根据 Date Formatting Guide )。
关于objective-c - 在 Objective C 中将公历日期转换为儒略日计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22829680/