유닉스 타임 스탬프를 줄리안으로 변환하십시오
-
19-08-2019 - |
문제
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);