【问题标题】:Convert Julian Date with Time (H/m/s) to Date Time in C#在 C# 中将带时间 (H/m/s) 的儒略日期转换为日期时间
【发布时间】:2014-10-30 14:14:36
【问题描述】:

如何将儒略日期转换为时间 - 例如2456961.090914(CE 2014 年 10 月 30 日 14:10:54.6 UT)你可以在这个网站上测试:http://aa.usno.navy.mil/data/docs/JulianDate.php in C#?

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

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

【问题讨论】:

    标签: c# datetime julian-date


    【解决方案1】:

    感谢 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 儒略日期类型,如果儒略日期是 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-02
      • 2021-12-23
      • 2015-11-08
      • 2019-12-11
      • 1970-01-01
      • 2021-02-22
      • 2012-08-03
      • 1970-01-01
      相关资源
      最近更新 更多