سؤال

هذا السؤال لديه بالفعل إجابة هنا:

لا أعرف نوع البيانات من time_t. هل هو تعويم مزدوج أم أي شيء آخر؟ لأنه إذا كنت أرغب في عرضه ، فأنا بحاجة إلى العلامة التي تتوافق معها printf. يمكنني التعامل مع الباقي من هناك للعرض time_t لكنني بحاجة إلى معرفة نوع البيانات الذي يتوافق معه.

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

المحلول

لسوء الحظ ، إنه ليس محمولًا تمامًا. عادة ما يكون جزءًا لا يتجزأ من ذلك يمكن ان يكون أي "عدد صحيح أو نوع العائم الحقيقي".

نصائح أخرى

إنه محدد منصة. ولكن يمكنك إلقاءها على نوع معروف.

printf("%lld\n", (long long) time(NULL));

يمكنك استخدام الوظيفة difftime. يعيد الفرق بين اثنين من المعطى time_t القيم ، قيمة الإخراج double (نرى وثائق difftime).

time_t actual_time;
double actual_time_sec;
actual_time = time(0);
actual_time_sec = difftime(actual_time,0); 
printf("%g",actual_time_sec);

يمكنك دائمًا استخدام شيء مثل MKTime لإنشاء وقت معروف (منتصف الليل ، الليلة الماضية) واستخدام Difftime للحصول على فرق زمني مزدوج بين الاثنين. بالنسبة لحل منصة مستقلة ، ما لم تتفادى في تفاصيل مكتباتك ، فلن تفعل أفضل بكثير من ذلك. وفقًا للمواصفات C ، فإن تعريف Time_T محدد للتنفيذ (وهذا يعني أن كل تطبيق للمكتبة يمكن أن يحددها ومع ذلك ، طالما أن وظائف المكتبة مع استخدامها تتصرف وفقًا للمواصفات.)

ومع ذلك ، فإن حجم Time_t على جهاز Linux الخاص بي هو 8 بايت ، مما يشير إلى int طويل أو مزدوج. لذلك أنا فعلت:

int main()
{
    for(;;)
    {
        printf ("%ld\n", time(NULL));
        printf ("%f\n", time(NULL));
        sleep(1);
    }
    return 0;
}

زاد الوقت الذي قدمته ٪ LD بواسطة كل خطوة وطبع العائم 0.000 في كل مرة. إذا كنت جحيمًا على استخدام printf لعرض Time_ts ، فإن أفضل رهان لك هو تجربة هذه التجربة الخاصة بك ومعرفة كيفية عملها على النظام الأساسي الخاص بك ومع المترجم الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top