Frage

Wie kann ich von einem Unix-Zeitstempel umwandeln (zB 1232559922) einen fraktionierten julian date (2454853,03150).

ich eine Website gefunden ( http://aa.usno.navy.mil /data/docs/JulianDate.php ), die eine ähnliche Berechnung durchführt, aber ich brauche es programmatisch zu tun.

Die Lösungen können in C / C ++ sein, Python, Perl, Bash, etc ...

War es hilfreich?

Lösung

Die Unix-Epoche (Nullpunkt) ist 1. Januar 1970 GMT. Das entspricht den julianischen Tag von 2.440.587,5

Also, in Pseudo-Code:

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

Andere Tipps

Ich weiß, dass dies eine alte Post, aber ich werde einfach sagen ...

Die Antwort von Jason Cohen ist eine gute Annäherung an die Umsetzung.

Es ist ein Problem, obwohl das auf die Anzahl der Sekunden an einem Tag bezieht. Ein Tag ist -exactly- nicht 86.400 Sekunden lang, und in regelmäßigen Abständen Sekunden zu Tagen hinzugefügt, um Zeit mit den verschiedenen beobachtbaren Standards zu synchronisieren. Diese werden Schaltsekunden genannt ( https://en.wikipedia.org/wiki/Leap_second ). Schaltsekunden werden zu UTC hinzugefügt, um es zu halten, innerhalb von 1 Sekunde von UT1.

Es liegt nahe, dass die Vernunft, da immer mehr Zeit seit dem 1. Januar abgelaufen ist, 1970, über die einfache Umwandlung mehr und mehr Fehler von zufließen wird „tatsächliche beobachtbaren Zeit.“ Zwischen 1972 und 2013 wurden 25 Schaltsekunden eingefügt.

Ein Teil der Schönheit und die Einfachheit der julianischen Tag Zahlen ist, dass sie repräsentieren überhaupt Datum Saiten nicht. Sie sind nur eine Zählung der vergangenen Zeit seit dem Start des Julian Epoche, ähnlich wie POSIX Zeit eine kontinuierliche Zählung von Millisekunden seit Beginn der POSIX-Epoche ist. Das einzige Problem, das, dann existiert, wenn Sie versuchen, einen julianischen Tag auf eine lokalisierte Datumszeichenfolge abzubilden.

Wenn Sie ein Datum Zeichenfolge, die innerhalb einer Minute genau ist (2013), dann werden Sie einen Algorithmus benötigen, die für Schaltsekunden ausmachen können.

Hier ist mein JavaScript-Code Unix Zeitstempel Julian zu konvertieren. Ursprünglich ist das aktuelle Datum und die Zeit zeigt, aber mit einem wenig mod ist die Antwort auf Ihre Frage:

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

Arbeits JSFiddle Beispiel hier

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top