Convert unix timestamp to julian
-
19-08-2019 - |
题
我怎么可以转换从unix timestamp(说1232559922)到小数朱利安的日期(2454853.03150).
我发现了一个网站( http://aa.usno.navy.mil/data/docs/JulianDate.php )执行一个类似的计算但是我需要做的是通过程序.
解决方案可以在C/C++、蟒蛇,perl,庆典,等等...
解决方案
在Unix纪元(零点)是1970年1月1日GMT。对应于的2440587.5的儒略日
因此,在伪码:
function float getJulianFromUnix( int unixSecs )
{
return ( unixSecs / 86400.0 ) + 2440587.5;
}
其他提示
我知道,这是一个古老的职位,但我只想说...
给出的答案Jason Cohen是一个良好的近似值的转换。
有一个问题,尽管这涉及数秒钟一天。一天是不是-没错-86400秒长,并定期秒都加入到天中,以保持时间同步的各种观察的标准。这些被称为闰秒(https://en.wikipedia.org/wiki/Leap_second).闰秒中加入UTC为了保持在1第二UT1。
它象征的原因,因为更多和更多的时间已经过去由于一月1,1970年,简单的转换上会产生更多的和更多的错误"实际可观察的时间。" 之间的1972年和2013年有增加25闰秒钟。
一部分美丽和简单的天朱利安的数字是,他们不表示日期串在所有。他们只是计数的经过时间开始以来,朱利安的时代,就像POSIX时间是一个连续计数的毫秒由于POSIX时代。唯一的问题,存在,那么,当你尝试图朱利安的天数给一个局部的日期串。
如果你需要一个日期串,准确到一分钟之内(2013年),那么你就需要一种算法,可以考虑闰秒钟。
下面是我的JavaScript代码转换的的Unix 的时间戳的朱利安的。本来是显示当前的日期和时间,但有一点是国防部回答你的问题:
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);
不隶属于 StackOverflow