JulianDayNumber

儒略日和儒略日期计算,支持以下日历

日历 纪元 ¹ 纪元
亚美尼亚历 0552-07-11 CE 亚美尼亚历
天文历 0001-01-01 CE CE
巴哈伊历 1844-03-21 CE 巴哈伊历
科普特历 0284-08-29 CE 戴克里先历
埃及历 0747-02-26 BCE 那波纳撒尔历
埃塞俄比亚历 0008-08-29 CE 基督降生历
法国共和历 1792-09-22 CE 共和历
格里高利历 0001-01-01 CE CE
希伯来历 3761-10-07 BCE AM
伊斯兰历 0622-07-16 CE AH
ISO
儒略历 0001-01-01 CE CE
花剌子密历 0632-06-21 CE 雅兹德格尔德历
马其顿历 0312-09-01 BCE 亚历山大历
玛雅历 3114-09-06 BCE
波斯历 0632-06-16 CE 雅兹德格尔德历
萨卡历 0079-03-24 CE 萨卡历
叙利亚历 0312-10-01 BCE 亚历山大历

¹ 儒略历中的纪元

儒略日数字相互转换算法使用整数数学以避免舍入误差,并且已对公元前 999,999 年至公元后 999,999 年的所有有效儒略日数字进行了往返测试。

安装

Swift Package Manager

在 Xcode 中为 https://github.com/sbooth/JulianDayNumber 添加软件包依赖项。

手动或自定义构建

  1. 克隆 JulianDayNumber 仓库。
  2. swift build.

示例

  1. 计算 1919-05-29 日全食的儒略日期。
let jd = AstronomicalCalendar.julianDateFrom(year: 1919, month: 5, day: 29)
// 2422107.5

注意

天文历是一种混合日历,1582 年 10 月 15 日之前的日期使用儒略历,之后的日期使用格里高利历。

  1. 将儒略日期 2422107.5 转换为 Date 实例。
let d = Date(julianDate: 2422107.5)
// Foundation.Date	1919-05-29 00:00:00 UTC
  1. 将格里高利历日期 2013-10-31 转换为儒略历日期。
let j = GregorianCalendar.julianDayNumberFrom(year: 2013, month: 10, day: 31)
let julianYMD = JulianCalendar.dateFromJulianDayNumber(j)
// (year: 2013, month: 10, day: 18)

文档

最新文档Swift Package Index 托管。

所有公共类、结构体和函数都应进行文档记录。如果您发现文档不足,请打开新 issue

限制

下表总结了儒略日数字计算的算术限制。

日历 最小 JDN 最大 JDN
亚美尼亚历 Int.min + 341 Int.max - 317
巴哈伊历 Int.min + 56457 2305795661307959248
科普特历 Int.min + 384 (Int.max - 3) / 4 - 124
埃及历 Int.min + 611 Int.max - 47
埃塞俄比亚历 Int.min + 384 (Int.max - 3) / 4 - 124
法国共和历 Int.min + 56759 2305795661307960548
格里高利历 Int.min + 56457 2305795661307959247
希伯来历 Int.min + 106960181 355839970905570
伊斯兰历 Int.min + 325 (Int.max - 15) / 30 - 7664
儒略历 Int.min + 144 (Int.max - 3) / 4 - 1401
花剌子密历 Int.min + 341 Int.max - 317
马其顿历 Int.min + 144 (Int.max - 3) / 4 - 1401
玛雅长纪历 Int.min + 584291 Int.max
波斯历 Int.min + 336 Int.max - 77
萨卡历 Int.min + 56457 2305795661307959298
叙利亚历 Int.min + 144 (Int.max - 3) / 4 - 1401

许可证

JulianDayNumber 在 MIT 许可证下发布。