web-dev-qa-db-fra.com

Quel type de données primitif est time_t?

Je ne connais pas le type de données de time_t. Est-ce un flotteur double ou autre chose? Parce que si je veux l'afficher, j'ai besoin de la balise qui lui correspond pour printf. Je peux gérer le reste à partir de là pour afficher time_t mais j'ai besoin de connaître le type de données qui lui correspond.

46
thyrgle

Malheureusement, ce n'est pas complètement portable. Il est généralement intégral, mais il peut être tout "type entier ou flottant réel".

28

C'est spécifique à la plate-forme. Mais vous pouvez le convertir en un type connu.

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

Vous pouvez utiliser la fonction difftime. Il renvoie la différence entre deux données time_t valeurs, la valeur de sortie est double (voir documentation 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);
15
user2483388

Vous pouvez toujours utiliser quelque chose comme mktime pour créer une heure connue (minuit, hier soir) et utiliser difftime pour obtenir un décalage horaire double précision entre les deux. Pour une solution indépendante de la plate-forme, à moins de fouiller dans les détails de vos bibliothèques, vous n'allez pas faire beaucoup mieux que cela. Selon la spécification C, la définition de time_t est définie par l'implémentation (ce qui signifie que chaque implémentation de la bibliothèque peut la définir comme bon lui semble, tant que les fonctions de bibliothèque qui l'utilisent se comportent conformément à la spécification).

Cela étant dit, la taille de time_t sur ma machine Linux est de 8 octets, ce qui suggère un long int ou un double. J'ai donc fait:

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

Le temps donné par le% ld a augmenté d'une unité à chaque étape et le flotteur a imprimé 0,000 à chaque fois. Si vous êtes déterminé à utiliser printf pour afficher time_ts, votre meilleur pari est d'essayer votre propre expérience et de voir comment cela fonctionne sur votre plate-forme et avec votre compilateur.

2