我需要将标准的 公历 日期转换为 儒略 日数。
我没有看到任何用C#记录的文档可以直接执行此操作,但是我在Googling上发现了许多建议使用ToOADate的帖子。
ToOADate上的文档没有建议将其作为儒略日期的有效转换方法。
任何人都可以澄清此函数是否将准确地执行转换,或者也许是将DateTime转换为儒略格式的字符串的更合适的方法。
通过Wikipedia的Julian Day页面验证后,这为我提供了预期的数字
public static long ConvertToJulian(DateTime Date) { int Month = Date.Month; int Day = Date.Day; int Year = Date.Year; if (Month < 3) { Month = Month + 12; Year = Year - 1; } long JulianDay = Day + (153 * Month - 457) / 5 + 365 * Year + (Year / 4) - (Year / 100) + (Year / 400) + 1721119; return JulianDay; }
但是,这是不了解所使用的幻数的。
谢谢
参考文献:
OADate与朱利安日期(Julian Dates)类似,但使用不同的起点(1899年12月30日与主前4713年1月1日)和一个不同的“新日期”点。朱利安日期(Julian Dates)认为中午是新的一天的开始,OADates使用现代定义午夜。
1899年12月30日午夜的儒略日期为2415018.5。此方法应为您提供适当的值:
public static double ToJulianDate(this DateTime date) { return date.ToOADate() + 2415018.5; }
至于算法:
if (Month < 3) ...
(153 * Month - 457) / 5
(int)(30.6 * Month - 91.4)
365 * Year
(Year / 4) - (Year / 100) + (Year / 400)
+ 1721119
- 462
- 457
- 92.4
- 91.4