Question

Comment puis-je convertir un horodatage Unix (par exemple, 1232559922) en une date fractionnelle en julien (2454853.03150).

J'ai trouvé un site Web ( http://aa.usno.navy.mil /data/docs/JulianDate.php ) qui effectue un calcul similaire mais que je dois effectuer par programme.

Les solutions peuvent être en C / C ++, Python, Perl, Bash, etc ...

Était-ce utile?

La solution

L'époque Unix (point zéro) est le 1er janvier 1970 GMT. Cela correspond au jour julien de 2440587.5

Donc, en pseudo-code:

function float getJulianFromUnix( int unixSecs )
{
   return ( unixSecs / 86400.0 ) + 2440587.5;
}

Autres conseils

Je sais qu'il s'agit d'un ancien post, mais je vais simplement dire ...

La réponse donnée par Jason Cohen est une bonne approximation de la conversion.

Il y a cependant un problème lié au nombre de secondes d'un jour. Un jour ne dure pas exactement 86400 secondes et, périodiquement, des secondes sont ajoutées aux jours afin de maintenir l'heure synchronisée avec les différents standards observables. Celles-ci s'appellent Leap Seconds ( https://en.wikipedia.org/wiki/Leap_second ). Des secondes sont ajoutées à UTC afin de le conserver dans la seconde qui suit UT1.

Il va sans dire que comme de plus en plus de temps s’est écoulé depuis le 1er janvier 1970, la conversion simple décrite ci-dessus entraînera de plus en plus d’erreurs dans les "temps observables réels". Entre 1972 et 2013, 25 secondes intercalaires ont été ajoutées.

Une partie de la beauté et de la simplicité des chiffres du jour Julien est qu’ils ne représentent pas du tout les chaînes de date. Ils ne sont qu'un comptage du temps écoulé depuis le début de l'époque julienne, un peu comme le temps POSIX est un comptage continu de millisecondes depuis l'époque POSIX. Le seul problème qui existe, c’est lorsque vous essayez de mapper un numéro du jour du calendrier Julien en une chaîne de date localisée.

Si vous avez besoin d'une chaîne de date précise à une minute près (en 2013), vous aurez besoin d'un algorithme capable de prendre en compte les secondes intercalaires.

Voici mon code JavaScript pour convertir l'horodatage Unix en Julian . À l'origine, affiche la date et l'heure actuelles, mais avec un peu de mod, répond à votre question:

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

Exemple de travail JSFiddle ici

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top