将Julian日期与时间(H / m / s)转换为C#中的日期时间

如何在时间上转换朱利安日期 – 例如2456961.090914(CE 2014年10月30日14:10:54.6 UT),您可以在本网站上测试: http : //aa.usno.navy.mil/data/docs/JulianDate。 php在C#中?

我尝试了几种我在网上找到的算法,但有些算法并没有考虑将朱利安视为double ,只考虑long或偶数。 其他一些使用我在System.DateTime没有的DateTime.ToOADate

如何将给定的Julian日期转换为正常/常规DateTime?

感谢Zator先生在这里回答我能解决我的问题:

 public DateTime JulianToDateTime(double julianDate) { double unixTime = (julianDate - 2440587.5) * 86400; DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc); dtDateTime = dtDateTime.AddSeconds(unixTime).ToLocalTime(); return dtDateTime; } 

值得一提的是,这只适用于CE Julian日期类型,如果Julian日期是BCE类型,它将无法工作,还需要其他function。 我也做了这个方法的相反版本,如下所示:

 public double DateTimeToJulian(DateTime dateTime) { DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0); TimeSpan diff = dateTime.ToUniversalTime() - origin; double unixTime = Math.Floor(diff.TotalSeconds); double julianDate = (unixTime / 86400) + 2440587.5; return julianDate; }