Voici le type de formatage du temps, je suis après: Je suis actuellement en train d'utiliser ce: p> ce qui donne: p> qui est proche, mais pas exact. Je n'arrive pas à trouver quoi que ce soit sur l'affichage d'affichage Comment puis-je résoudre ces deux problèmes? P> P> -0500 code> à la fin. De plus, je reçois les secondes comme un int. P>
3 Réponses :
% z (minuscule Z). P>
Cependant, cela n'apparaît pas dans le Spécification POSIX . Google m'a emmené dans un cercle retour ici . P >
"% y-% m-% d% t% z" code>, mais il semble
% z code> est une extension GNU. P>
% T ne donne pas les chiffres subectoraux demandés dans la question.
Je suis venu avec ceci:
char fmt[64], buf[64]; struct timeval tv; struct tm *tm; gettimeofday(&tv, NULL); if((tm = localtime(&tv.tv_sec)) != NULL) { strftime(fmt, sizeof fmt, "%Y-%m-%d %H:%M:%S.%%06u %z", tm); snprintf(buf, sizeof buf, fmt, tv.tv_usec); printf("'%s'\n", buf); }
gettimeoDay () code> et struct Timeval code>, qui a un membre de microsecondes pour la précision supérieure. LI>
- Utilisez une approche en deux étapes, où nous construisons d'abord une chaîne contenant toutes les données à l'exception des microsecondes. Li>
- Utilisez des "Z" minuscules pour le décalage de fuseau horaire. Cela semble être une extension GNU. Li>
ul>
J'ai essayé de ré-créer le décalage de fuseau horaire manuellement, via la seconde code> Struct Timezone * code> argument de GettimeOdday () code>, mais sur ma machine, il renvoie un Décalage de 0 ce qui n'est pas correct. Page manuelle pour GetTimeFay () Code> a Beaucoup de choses à dire sur la manipulation de Timezones sous Linux (qui est le système d'exploitation que j'ai testé). P> p>
% z code> est toujours non standard =)
Merci, c'est le plus proche que j'ai obtenu jusqu'à présent. Le '%% 06U' vient de jeter des données de déchets à moi en ce moment, mais le reste fonctionne bien. P.s oui, je sais que le% z est non standard, mais je vais le prendre :)
@aditya: C'est bizarre ... Le code ci-dessus devrait fonctionner. Assurez-vous de fournir le deuxième appel SNPRINTF () avec une valeur de microsecondes non signée appropriée à utiliser pour le format% 06U. Vous pouvez essayer d'imprimer le résultat après l'appel de StrfTime (), vous devez voir votre sortie finale, à l'exception de la séquence% 06U après la période.
Il semble que tout le monde a manqué le fait que% Z est complètement standard C99. C'est dans le projet N1256 (Document de travail TC3), disponible librement), ainsi que le document standard officiel, et il est également spécifié dans POSIX ( pubs.opengroup.org/onlinepubs/9699919799/fonctions/... ).
TV.TV_USEC code> est TYPE
SUSECONDS_T CODE>. N'ont pas trouvé de modificateur% pour cela. Peut-être qu'un casting to (non signé long) et utiliser
% 06lu code>. (ou couler à (uintMax_t) et utilisez priumax.
Je pense que la raison %% 06U est de jeter des ordures est que l'USEC peut être une longue intensive, pas un int. Donc, vous devrez peut-être utiliser %% 06LU à la place.
% z code> peut également être imprimé à l'aide de
Timezone :: tz_minutewest code> ou
TM :: tm_gmtoff code>. Le dernier semble être non standard, cependant.