我怎么可以转换从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);

工作的jsfiddle例如此处

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top