Nano Hash - криптовалюты, майнинг, программирование

Преобразование временной метки unix в юлианскую

Как я могу преобразовать временную метку unix (скажем, 1232559922) в дробную дату по юлианскому календарю (2454853.03150).

Я нашел веб-сайт ( http://aa.usno.navy.mil/data/docs/JulianDate.php ), который выполняет аналогичный расчет, но мне нужно сделать это программно.

Решения могут быть на C/C++, python, perl, bash и т.д.


Ответы:


1

Эпоха Unix (нулевая точка) — 1 января 1970 года по Гринвичу. Это соответствует юлианскому дню 2440587,5.

Итак, в псевдокоде:

function float getJulianFromUnix( int unixSecs )
{
   return ( unixSecs / 86400.0 ) + 2440587.5;
}
21.01.2009
  • Вы забыли .5 в конце. Добавленная константа должна быть 2440587,5. 03.10.2009
  • я не могу понять, что такое 86400.0? и результат далек от текущей временной шкалы. 08.09.2016
  • 86400 — это множитель секунд в днях (1 день = 24 часа в сутки x 60 минут в час x 60 секунд в минуту). 11.11.2016

  • 2

    Я знаю, что это старый пост, но я просто скажу...

    Ответ, данный Джейсоном Коэном, является хорошим приближением к обращению.

    Однако есть проблема, связанная с количеством секунд в одном дне. День не длится ровно 86400 секунд, и время от времени к дням добавляются секунды, чтобы синхронизировать время с различными наблюдаемыми стандартами. Они называются високосными секундами (https://en.wikipedia.org/wiki/Leap_second). Високосные секунды добавляются к UTC, чтобы удерживать его в пределах 1 секунды от UT1.

    Само собой разумеется, что по мере того, как с 1 января 1970 года проходит все больше и больше времени, простое преобразование, описанное выше, будет накапливать все больше и больше ошибок из «фактического наблюдаемого времени». В период с 1972 по 2013 год было добавлено 25 дополнительных секунд.

    Частью красоты и простоты чисел по юлианскому календарю является то, что они вообще не представляют строки дат. Это просто подсчет времени, прошедшего с начала юлианской эпохи, подобно тому, как время POSIX представляет собой непрерывный отсчет миллисекунд с начала эпохи POSIX. Таким образом, единственная проблема возникает, когда вы пытаетесь сопоставить число юлианского дня с локализованной строкой даты.

    Если вам нужна строка даты с точностью до минуты (в 2013 году), вам понадобится алгоритм, учитывающий високосные секунды.

    08.06.2013
  • Я думаю, что время Unix/Posix игнорирует високосные секунды, поэтому алгоритм Джейсона Коэна не будет дрейфовать по мере накопления високосных секунд. См. en.wikipedia.org/wiki/Unix_time#Leap_seconds. Если я что-то неправильно понимаю, пожалуйста, поправьте меня. 20.05.2014

  • 3

    Вот мой код JavaScript для преобразования временной метки Unix в Julian. Изначально показывает текущую дату и время, но с небольшим модом есть ответ на ваш вопрос:

    function computeJulianDate(DD,MM,YY,HR,MN,SC) {
        with (Math) {
            HR = HR + (MN / 60) + (SC/3600);
            GGG = 1;
            if (YY <= 1585) GGG = 0;
            JD = -1 * floor(7 * (floor((MM + 9) / 12) + YY) / 4);
            S = 1;
            if ((MM - 9)<0) S=-1;
            A = abs(MM - 9);
            J1 = floor(YY + S * floor(A / 7));
            J1 = -1 * floor((floor(J1 / 100) + 1) * 3 / 4);
            JD = JD + floor(275 * MM / 9) + DD + (GGG * J1);
            JD = JD + 1721027 + 2 * GGG + 367 * YY - 0.5;
            JD = JD + (HR / 24);
        }
        return JD;
    }
    function getUTCDateTimeOrJD(now,jd=0) {
        var hours = now.getUTCHours();
        var minutes = now.getUTCMinutes();
        var seconds = now.getUTCSeconds()
        var month = now.getUTCMonth() + 1;
        var day = now.getUTCDate();
        var year = now.getUTCFullYear();
        if (jd==1)
            return computeJulianDate(month, day, year, hours, minutes, seconds);
        else
            return day+". "+month+". "+year+". "+hours+":"+minutes+":"+seconds;
    }
    
    var unixTime = 1473294606;
    
        getUTCDateTimeOrJD(new Date(unixTime*1000));
        getUTCDateTimeOrJD(new Date(unixTime*1000),1);
    

    Рабочий пример JSFiddle здесь

    08.09.2016
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..