2014-10-30 103 views
2

如何將時間轉換爲Julian日期 - 例如2456961.090914(CE 2014年10月30日14:10:54.6 UT),你可以在這個網站上測試:http://aa.usno.navy.mil/data/docs/JulianDate.php在C#中?

我嘗試了幾種算法,我在網上找到了,但有些不考慮朱利安作爲double,只有long甚至int。其他一些使用DateTime.ToOADate,我沒有在System.DateTime

如何將給定的Julian日期轉換爲正常/正常的DateTime?將Julian日期與時間(H/m/s)轉換爲日期C#中的時間

回答

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

值得一提的,雖然,對於行政長官朱利安日期類型這隻作品,如果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; 
}