2010-10-14 5 views
0

J'ai un long qui a l'heure au format UTC comme timestamp pour certaines données, maintenant je veux le convertir à ce format: mois 1-12 Jour 1- 31 format 24 heures 0-23 minute 0-59 deuxième 0-59 nanosecondes subsecond 0-999,999,999Convertir UTC en jours, heures minutes etc en C

maintenant les nanosecondes peuvent évidemment être mis à 0 car il n'a pas besoin d'être précis que.

Quelle est la meilleure méthode pour cela? J'ai vu des tas d'exemples mais ils sont confus et ne semblent pas fonctionner pour convertir une date arbitraire, ils travaillent seulement pour convertir l'heure exacte à ce moment.

+0

Toute fonction strictement UTC retournera [0, 60] pour les secondes (60 étant un saut seconde), cependant, de nombreuses implémentations ignorent ce . Soyez conscient de l'implémentation que vous choisissez. – Thanatos

Répondre

0

Voilà, c'est parti. Notez les lignes commentées

#include <stdio.h> 
#include <time.h> 

int main(void) { 
    char buf[512]; 
    long stamp = 1287055578; 
    struct tm x; 
    time_t cstamp = stamp;  /* 1 */ 
    x = *gmtime(&cstamp);  /* 2 */ 

    sprintf(buf, "month %d Day %d 24 Hour format %d minute %d second %d " 
       "subsecond nanoseconds 0", 
       x.tm_mon + 1, x.tm_mday, x.tm_hour, x.tm_min, x.tm_sec); 

    printf("%s\n", buf); /* long converted to string */ 
    return 0; 
} 

1) gmtime prend une valeur de type time_t*, donc je convertir implicitement la long-time_t et passe cette adresse à l'étape suivante

2) gmtime renvoie un pointeur vers une struct tm objet. Déréférencer ce pointeur et copiez l'objet à mon locale x variables

Au lieu de gm_time, vous pouvez utiliser localtime et les fonctions de la bibliothèque traitent des fuseaux horaires et les problèmes de l'heure d'été.

+0

Bonne réponse, merci. – rolls

0

Merci pour les réponses à tous, je fini par le faire de cette façon

long UTCInSeconds = ... 

struct tm * local; 
local = localtime(UTCInSeconds); 

Month = local->tm_mon + 1; 
Day = local->tm_mday; 
Year = local->tm_year + 1900; 
Hour = local->tm_hour; 
Minute = local->tm_min; 
Second = local->tm_sec; 
Questions connexes