如何将朱利安日期与时间转换 - 例如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?
答案 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;
}