Преобразование даты по юлианскому календарю со временем (ч/м/с) в дату и время в С#

Как я могу преобразовать дату по юлианскому календарю со временем - например. 2456961.090914 (CE 2014, 30 октября, 14:10:54,6 UT), как вы можете проверить на этом веб-сайте: http://aa.usno.navy.mil/data/docs/JulianDate.php на C#?

Я испробовал несколько алгоритмов, которые нашел в сети, но некоторые не рассматривают юлианский как double, только long или даже int. Некоторые другие используют DateTime.ToOADate, которых у меня нет в System.DateTime.

Как я могу преобразовать заданную дату по юлианскому календарю в обычный/обычный DateTime?


person Schrödinger's Box    schedule 30.10.2014    source источник


Ответы (1)


Благодаря г-ну Затору ответ здесь Я смог решить свою проблему следующим образом:

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;
}
person Schrödinger's Box    schedule 31.10.2014