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

时间:2014-10-30 14:14:37

标签: c# datetime julian julian-date

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

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

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

1 个答案:

答案 0 :(得分:3)

感谢Zator先生回答here我能够解决我的问题:

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类型,它将无法工作,还需要其他功能。我也做了这个方法的相反版本,如下所示:

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;
}