문제

UNIX 타임 스탬프 (예 : 1232559922)에서 일부 줄리안 날짜 (2454853.03150)로 어떻게 변환 할 수 있습니까?

웹 사이트를 찾았습니다 ( http://aa.usno.navy.mil/data/docs/juliandate.php ) 비슷한 계산을 수행하지만 프로그래밍 방식으로 수행해야합니다.

솔루션은 C/C ++, Python, Perl, Bash 등에있을 수 있습니다 ...

도움이 되었습니까?

해결책

Unix Epoch (Zero-Point)는 1970 년 1 월 1 일 GMT입니다. 그것은 2440587.5의 줄리안의 날에 해당합니다

의사 코드에서 :

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

다른 팁

나는 이것이 오래된 게시물이라는 것을 알고 있지만, 나는 단지 말할 것이다 ...

Jason Cohen이 제공 한 답변은 전환의 좋은 근사치입니다.

하루에 몇 초과 관련된 문제가 있습니다. 하루의 시간은 86400 초 길이가 아니며, 다양한 관측 가능한 표준과 동기화하기 위해 시간에 2 초가 며칠에 추가됩니다. 이것들은 도약 초라고합니다 (https://en.wikipedia.org/wiki/leap_second). UT1의 1 초 이내에 보관하기 위해 LEAP 초가 UTC에 추가됩니다.

1970 년 1 월 1 일 이후 점점 더 많은 시간이 지남에 따라 위의 간단한 변환은 "실제 관찰 가능한 시간"에서 점점 더 많은 오류가 발생할 것이라고 추론합니다. 1972 년에서 2013 년 사이에 25 초가 더 추가되었습니다.

줄리안의 날 숫자의 아름다움과 단순성의 일부는 그들이 날짜 문자열을 전혀 나타내지 않는다는 것입니다. 그들은 Julian Epoch가 시작된 이래로 Posix Time이 Posix Epoch 이후 지속적인 밀리 초과 마찬가지로 경과 한 시간에 불과합니다. 그러므로 존재하는 유일한 문제는 줄리안의 날 번호를 현지 날짜 문자열에 매핑하려고 할 때입니다.

1 분 이내에 (2013 년) 정확한 날짜 문자열이 필요한 경우 도약을 설명 할 수있는 알고리즘이 필요합니다.

다음은 변환 할 JavaScript 코드입니다 유닉스 타임 스탬프 줄리안. 원래 현재 날짜와 시간을 보여주고 있지만 약간의 모드는 질문에 대한 답입니다.

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 예제 작업

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top