سؤال

وكيف يمكنني تحويل من الطابع الزمني يونكس (قل 1232559922) إلى تاريخ جوليان كسور (2٬454٬853،03150).

ولقد وجدت موقع ( http://aa.usno.navy.mil /data/docs/JulianDate.php ) التي تنفذ عملية حسابية مشابهة ولكن أنا بحاجة للقيام بذلك برمجيا.

وحلول يمكن أن يكون في C / C ++، بيثون، بيرل، باش، الخ ...

هل كانت مفيدة؟

المحلول

ووعصر يونكس (صفر نقطة) هو 1 يناير 1970 GMT. الذي يتوافق مع يوم جوليان من 2440587.5

وهكذا، في شبه كود:

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

نصائح أخرى

وأنا أعلم أن هذا هو آخر العمر، ولكن أنا أقول فقط ...

والجواب الذي قدمه جايسون كوهين هو تقريب جيد للتحويل.

وهناك مشكلة على الرغم من أن يتصل عدد الثواني في يوم واحد. يوم لا -exactly- 86400 ثوان طويلة، وتضاف دوريا ثانية لأيام من أجل الحفاظ على الوقت متزامنة مع مختلف معايير واضحة. وتسمى هذه قفزة ثانية ( https://en.wikipedia.org/wiki/Leap_second ). تضاف قفزة ثانية لUTC من أجل إبقائه في حدود 1 ثانية من UT1.

ومن المنطقي أن المزيد والمزيد من الوقت قد انقضت منذ 1 يناير 1970، تحويل بسيط أعلاه تعود أكثر وأكثر خطأ من "الوقت الفعلي يمكن ملاحظتها." بين عامي 1972 و 2013 أضيفت هناك 25 ثانية كبيسة.

وجزء من جمال وبساطة أرقام يوم جوليان هو أنها لا تمثل سلاسل التاريخ على الإطلاق. أنها ليست سوى عدد من الوقت الذي انقضى منذ بداية عصر جوليان، يشبه إلى حد كبير POSIX الوقت هو العد مستمر المللي ثانية منذ عصر POSIX. المشكلة الوحيدة التي موجودا، إذن، هو عند محاولة تعيين عدد يوم جوليان لسلسلة تاريخ المترجمة.

إذا كنت في حاجة الى سلسلة التاريخ الذي غير دقيقة لفي غضون دقيقة (في عام 2013)، ثم ستحتاج خوارزمية التي يمكن أن تمثل قفزة ثانية.

وهنا هو بلدي شفرة جافا سكريبت لتحويل يونكس الطابع الزمني إلى <م> جوليان . كتبت يظهر التاريخ والوقت الحالي، ولكن مع القليل من وزارة الدفاع هو الجواب على سؤالك:

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