Je me pose la question suivante : vaut-il mieux utiliser sprintf() ou
strftime() pour formater des dates/heures dans des tampons ? Je vois
souvent sprintf() utilisé avec les membres de la structure tm et peu
souvent strftime(), certains auraient-ils eu de mauvaises expériences
avec cette dernière fonction ?
Le programme ci-dessous fonctionne bien (FMTDATE_WITH_SPRINTF à 1 ou
0) sous Windows (VC++ 6.0, gcc 3.3.3 Interix) mais je ne l'ai pas
testé sous Unix (pas dispo).
Merci.
Regis
____________________________________________________
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "dbgtrace.h" /* macros maison FUNCNAME et TRACE_ERR */
#define LG_DATE 8
#define FMTDATE_WITH_SPRINTF 0
long numDateYYYYMMDD(void);
int main(void)
{
long numDate = numDateYYYYMMDD();
printf("Date YYYYMMDD: %ld\n", numDate);
return 0;
}
/**
* numDateYYYYMMDD()
* Returns a numeric date on 8 digits (YYYYMMDD)
* @return numeric date or -1 if failure
*/
long numDateYYYYMMDD(void)
{
time_t calTime;
struct tm * locTime;
char date[LG_DATE+1];
long numDate;
FUNCNAME("numDateYYYYMMDD");
/* Gets the calendar time */
calTime = time(NULL);
if (calTime == (time_t)-1)
{
TRACE_ERR("calendar time is unavailable", -1);
}
/* Converts the calendar time into local time */
locTime = localtime(&calTime);
/* Writes the local time in the buffer according to the YYYYMMDD
format */
#ifdef FMTDATE_WITH_SPRINTF
sprintf(date,"%04d%02d%02d",
locTime->tm_year+1900,
locTime->tm_mon+1,
locTime->tm_mday);
date[LG_DATE] = '\0';
#else
if (strftime(date, LG_DATE+1,"%Y%m%d\0",locTime) != LG_DATE)
{
TRACE_ERR("failed to print the formatted date in the buffer",
-1);
}
#endif
Je me pose la question suivante : vaut-il mieux utiliser sprintf() ou strftime() pour formater des dates/heures dans des tampons ? Je vois
strftime(), c'est fait pour, et il y a un contrôle de la taille.
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
Antoine Leca
En , Targeur fou va escriure:
Je me pose la question suivante : vaut-il mieux utiliser sprintf() ou strftime() pour formater des dates/heures dans des tampons ?
Comme disent les Normands,... cela dépend !!! s(n)printf est indépendant de la locale, ce qui peut être important (surtout que strftime a eu pas mal de spécificateurs "portables" ajoutés avec C99, donc en fait peu portables aujourd'hui).
Je vois souvent sprintf() utilisé avec les membres de la structure tm et peu souvent strftime(), certains auraient-ils eu de mauvaises expériences avec cette dernière fonction ?
Je crois surtout que strftime() est beaucoup plus récente, et BEAUCOUP moins connue.
De plus, comme tu le pressens, les premières implémentations n'étaient peut-être pas de la meilleure qualité. Cependant en 2004, ce genre de souci devrait avoir disparu.
locTime = localtime(&calTime);
Heu... le contrôle de l'erreur ?
De plus, je préfère gmtime() en règle générale pour l'usage interne, c'est moins casse-gueule le dernier dimanche d'octobre.
Antoine
En 99d640fa.0501140825.28aa2922@posting.google.com, Targeur fou va escriure:
Je me pose la question suivante : vaut-il mieux utiliser sprintf()
ou strftime() pour formater des dates/heures dans des tampons ?
Comme disent les Normands,... cela dépend !!!
s(n)printf est indépendant de la locale, ce qui peut être important (surtout
que strftime a eu pas mal de spécificateurs "portables" ajoutés avec C99,
donc en fait peu portables aujourd'hui).
Je
vois souvent sprintf() utilisé avec les membres de la structure tm
et peu souvent strftime(), certains auraient-ils eu de mauvaises
expériences avec cette dernière fonction ?
Je crois surtout que strftime() est beaucoup plus récente, et BEAUCOUP moins
connue.
De plus, comme tu le pressens, les premières implémentations n'étaient
peut-être pas de la meilleure qualité. Cependant en 2004, ce genre de souci
devrait avoir disparu.
locTime = localtime(&calTime);
Heu... le contrôle de l'erreur ?
De plus, je préfère gmtime() en règle générale pour l'usage interne, c'est
moins casse-gueule le dernier dimanche d'octobre.
Je me pose la question suivante : vaut-il mieux utiliser sprintf() ou strftime() pour formater des dates/heures dans des tampons ?
Comme disent les Normands,... cela dépend !!! s(n)printf est indépendant de la locale, ce qui peut être important (surtout que strftime a eu pas mal de spécificateurs "portables" ajoutés avec C99, donc en fait peu portables aujourd'hui).
Je vois souvent sprintf() utilisé avec les membres de la structure tm et peu souvent strftime(), certains auraient-ils eu de mauvaises expériences avec cette dernière fonction ?
Je crois surtout que strftime() est beaucoup plus récente, et BEAUCOUP moins connue.
De plus, comme tu le pressens, les premières implémentations n'étaient peut-être pas de la meilleure qualité. Cependant en 2004, ce genre de souci devrait avoir disparu.
locTime = localtime(&calTime);
Heu... le contrôle de l'erreur ?
De plus, je préfère gmtime() en règle générale pour l'usage interne, c'est moins casse-gueule le dernier dimanche d'octobre.
Antoine
Laurent Deniau
Antoine Leca wrote:
En , Targeur fou va escriure:
Je me pose la question suivante : vaut-il mieux utiliser sprintf() ou strftime() pour formater des dates/heures dans des tampons ?
Comme disent les Normands,... cela dépend !!! s(n)printf est indépendant de la locale, ce qui peut être important (surtout que strftime a eu pas mal de spécificateurs "portables" ajoutés avec C99, donc en fait peu portables aujourd'hui).
Je vois souvent sprintf() utilisé avec les membres de la structure tm et peu souvent strftime(), certains auraient-ils eu de mauvaises expériences avec cette dernière fonction ?
Je crois surtout que strftime() est beaucoup plus récente, et BEAUCOUP moins connue.
Et que ca reciproque strptime l'est encore moins et non standard, ce qui est dommage...
a+, ld.
Antoine Leca wrote:
En 99d640fa.0501140825.28aa2922@posting.google.com, Targeur fou va escriure:
Je me pose la question suivante : vaut-il mieux utiliser sprintf()
ou strftime() pour formater des dates/heures dans des tampons ?
Comme disent les Normands,... cela dépend !!!
s(n)printf est indépendant de la locale, ce qui peut être important (surtout
que strftime a eu pas mal de spécificateurs "portables" ajoutés avec C99,
donc en fait peu portables aujourd'hui).
Je
vois souvent sprintf() utilisé avec les membres de la structure tm
et peu souvent strftime(), certains auraient-ils eu de mauvaises
expériences avec cette dernière fonction ?
Je crois surtout que strftime() est beaucoup plus récente, et BEAUCOUP moins
connue.
Et que ca reciproque strptime l'est encore moins et non standard, ce qui
est dommage...
Je me pose la question suivante : vaut-il mieux utiliser sprintf() ou strftime() pour formater des dates/heures dans des tampons ?
Comme disent les Normands,... cela dépend !!! s(n)printf est indépendant de la locale, ce qui peut être important (surtout que strftime a eu pas mal de spécificateurs "portables" ajoutés avec C99, donc en fait peu portables aujourd'hui).
Je vois souvent sprintf() utilisé avec les membres de la structure tm et peu souvent strftime(), certains auraient-ils eu de mauvaises expériences avec cette dernière fonction ?
Je crois surtout que strftime() est beaucoup plus récente, et BEAUCOUP moins connue.
Et que ca reciproque strptime l'est encore moins et non standard, ce qui est dommage...