#include <time.h> // <ctime> en C++
size_t strftime( char * strBuffer, size_t maxSize,
const char * format, const struct tm * pTime );
Cette fonction permet de convertir une structure de type struct tm
, contenant des informations
de date et d'heure en une chaîne de caractères C. Vous pouvez contrôler le format d'affichage, un peu à la manière d'un appel à la fonction
sprintf
.
Il existe un grand nombre d'éléments syntaxique pour introduire chaque partie d'une date. Ces éléments syntaxique sont introduit par un caractère %. Certains de ces éléments existent depuis très longtemps, d'autres on été rajoutés par la suite. Attention : tous les éléments syntaxique de formatage de votre date ne font pas tous partie des standards C89 ou C99. Voici un tableau présentant les principaux éléments de formatage disponibles pour cette fonction (la dernière colonne indiquant à quelle version du standard C est associé l'élément) :
Syntaxe | Correspondance | Exemple | Std |
---|---|---|---|
%a | Nom du jour sur 3 caractères | Mon | C89 |
%A | Nom complet du jour | Monday | C89 |
%b | Nom du mois sur 3 caractères | Apr | C89 |
%B | Nom complet du mois | April | C89 |
%c | Temps et heure | Mon Apr 07 21:56:02 2014 | C89 |
%C | Année divisée par 100 (00..99) | 20 | C99 |
%d | Jour dans le mois sur 2 digits | 07 | C89 |
%D | Affichage court pour la date (%m/%d/%y) | 04/07/14 | C99 |
%e | Jour dans le mois (padding via un blanc) | 7 | C99 |
%F | Date au format YYYY-MM-DD (%Y-%m-%d) | 2014-04-07 | C99 |
%g | Comme %G sans le siècle, c'est-à-dire avec une année sur deux chiffres (00-99). | 14 | C99 |
%G | L'année ISO 8601 avec le siècle comme nombre décimal. L'année sur quatre chiffres correspond au numéro de la semaine ISO (voir %V). C'est le même format que %y, sauf que si le numéro de semaine appartient à l'année suivante ou précédente, c'est celle-ci qui est affichée à la place. | 2014 | C99 |
%h | Equivalent à %b | Apr | C99 |
%H | L'heure courant sur 24 heures (00..23). Padding avec le caractère 0. | 21 | C89 |
%I | L'heure courant sur 12 heures (01..12). Padding avec le caractère 0. | 09 | C89 |
%j | Le numéro du jour dans l'année sur trois digits (001..366). Padding avec le caractère 0. | 097 | C89 |
%k | L'heure courante sur 24 heures (0..23). Padding avec le caractère espace. | 21 | GNU |
%l | L'heure courante sur 12 heures (1..12). Padding avec le caractère espace. | 9 | GNU |
%m | Le numéro du mois sur deux digits (01..12). Padding avec le caractère 0. | 04 | C89 |
%M | La minute courante sur deux digits (00..59). | 56 | C89 |
%n | Un retour à la ligne (comme pour la fonction printf ). |
C99 | |
%p | L'une des deux chaînes « AM » ou « PM » en fonction de l'heure (ou bien la traduction de ces chaînes en fonctions de la localisation). Midi est traité comme « PM » et minuit comme « AM ». | PM | C89 |
%P | Comparable à %p, mais les chaînes de caractères seront affichés en minuscules. | pm | GNU |
%r | L'heure en notation a.m. ou p.m. Dans la localisation POSIX, c'est équivalent à %I:%M:%S %p. | 09:56:02 PM | C99 |
%R | L'heure en format 24 heures (%H:%M) mais sans les secondes. Pour avoir les secondes veuillez utiliser le format %T. | 21:56 | C99 |
%s | Le nombre de secondes écoulées depuis le 1er janvier 1970 à 00:00:00 UTC. | 1396900562 | GNU |
%S | La seconde, sous forme de nombre décimal (00-60). | 02 | C89 |
%t | Insère un caractère de tabulation, tout comme pour la fonction printf . |
C99 | |
%T | L'heure en notation 24 heures (%H:%M:%S). Utiliser %r pour l'avoir au format a.m. / p.m. | 21:56:02 | C99 |
%u | Le jour de la semaine sous forme décimal, de 1 (lundi) à 7. Veuillez utiliser %w si vous souhaitez débuter par dimanche. | 7 | C99 |
%U | Le numéro de la semaine dans l'année, sous forme de nombre décimal (00-53), en commençant le comptage au premier dimanche de l'année. Voir aussi %V et %W. | 14 | C89 |
%V | Le numéro de semaine ISO 8601:1988 de l'année en cours sous forme de nombre décimal dans l'intervalle 01-53, où la semaine 1 est la première ayant au moins 4 jours dans l'année en cours, et où lundi est le premier jour de la semaine. Voir aussi %U et %W. | 15 | C99 |
%w | Le numéro du jour de la semaine, sous forme décimale (0-6), dimanche valant 0. Voir aussi %u. | 1 | C89 |
%W | Le numéro de la semaine dans l'année, sous forme de nombre décimal (00-53), en commençant le comptage au premier Lundi de l'année. | 14 | C89 |
%x | La représentation usuelle de la date, sans l'heure, dans la localisation en cours. | 04/07/14 | C89 |
%X | La représentation usuelle de l'heure, sans la date, dans la localisation en cours. | 21:56:02 | C89 |
%y | L'année, sous forme de nombre décimal sur deux caractères (entre 00 et 99). | 14 | C89 |
%Y | L'année, sous forme de nombre décimal sur quatre caractères. | 2014 | C89 |
%z | Le fuseau horaire sous forme de décalage GMT. Nécessaire pour créer des dates conformes à la RFC 822 (avec « %a, %d %b %Y %H:%M:%S %z »). | +0200 | C99 |
%Z | Le nom ou l'abréviation du fuseau horaire. | CEST | C89 |
%% | Permet simplement d'insérer un caractère « % ». | % | C89 |
Attention : il n'existe pas de standard GNU pour C. Ce que nous voulu faire passer comme information, c'est
que les formats associés ne peuvent être utilisés que sur le compilateur gcc
proposé par la
« GNU Compiler Collection ».
C99 définit aussi deux « modificateurs » permettant d'obtenir des représentations alternatives pour certains éléments de formatage : les modificateurs E et O. Pour obtenir des affichages dépendants de la localisation, il est possible d'utiliser les séquences suivantes : %Ec, %EC, %Ex, %EX, %Ey, %EY. Pour obtenir d'autres formats numériques, il est possible d'utiliser les séquences suivantes : %Od, %Oe, %OH, %OI, %Om, %OM, %OS, %Ou, %OU, %OV, %Ow, %OW, %Oy. Nous vous laissons le soin de tester ces séquences.
struct tm
contenant les informations
de date et d'heure.
Si la taille du bloc de mémoire alloué est suffisamment grande pour contenir la chaîne produite (avec le caractère de terminaison de la chaîne '\0'
)
alors la fonction renverra le nombre de caractères produit par ce formatage, mais sans le caractère '\0'
.
Si, par contre, la taille de bloc de mémoire dans lequel produire la chaîne, était trop courte, alors la valeur retournée sera 0. Dans ce cas, vous devrait alors considérer le contenu de cette zone mémoire comme étant indéterminé.
#include <stdio.h> #include <time.h> #define MAX_SIZE 80 int main( int argc, char * argv[] ) { time_t timestamp = time( NULL ); struct tm * pTime = localtime( & timestamp ); char buffer[ MAX_SIZE ]; strftime( buffer, MAX_SIZE, "%d/%m/%Y %H:%M:%S", pTime ); printf( "Date and french time : %s\n", buffer ); return 0; }
Voici le résultat produit par ce programme.
$> gcc -o Sample Sample.c $> ./Sample Date and french time : 22/11/2014 22:27:07 $>
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :