Une petite méthode de prog pour résoudre le problème.
typedef enum e_format
{
JJMOISYYYY,
JJMMYYYY,
MMYYYY,
MOISYYYY
} e_dateFormat;
BOOL isBisextile(LONG year)
{
if (((year % 4) == 0) && (((year % 100) != 0) || ((year % 400) == 0)))
return TRUE;
return FALSE;
}
int getNumberDay_Month(int month, int year)
{
const int nbDayMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int ndays;
ndays = nbDayMonth[month - 1];
if (isBisextile(year) && (month == 2))
ndays++;
return(ndays);
}
char *SYSTEMTIMEFormat(SYSTEMTIME time, e_dateFormat dateFormat, char *separator)
{
char buffer[256];
const char *month[] = {"Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Décembre"};
switch (dateFormat)
{
case JJMOISYYYY:
wsprintf(buffer, "%i%s%s%s%i", time.wDay, separator, month[time.wMonth - 1], separator, time.wYear);
break;
case JJMMYYYY:
wsprintf(buffer, "%i%s%02i%s%i", time.wDay, separator, time.wMonth, separator, time.wYear);
break;
case MMYYYY:
wsprintf(buffer, "%02i%s%i", time.wMonth, separator, time.wYear);
break;
case MOISYYYY:
wsprintf(buffer, "%s%s%i", month[time.wMonth - 1], separator, time.wYear);
break;
default:
return NULL;
}
return strdup(buffer);
}
char *getToday(e_dateFormat dateFormat, char *separator)
{
SYSTEMTIME time;
GetLocalTime(&time);
return SYSTEMTIMEFormat(time, dateFormat, separator);
}
Voila une méthode pour faire ce que tu demandes.
L'appel à faire est; today = getToday(JJMMYYYY, "/");
avec today déclaré comme un char*.
Mais je pense que la méthode de brunews est bien mieux. Merci à lui d'ailleurs, je ne connaissais pas cette fonction, c'est pourquoi j'avais développé ce jeu de fonctions.
Il faudrait voir également voir à ne pas retourné une chaine de caractere, mais à passer un pointeur sur cette chaine dans la fonction.
Ainsi le programmeur saura qu'il doit la libérer. Alors que comme ca, il peut facilement oublier.
Il faudrait egalement voir une gestion du séparateur plus performante. Le programme risque en effet de planter si je ne donne pas de separateur à la chaine. Peut etre un séparateur par défaut si je n'en donne pas.
Mais la fonction GetDateFormat fait la meme chose, alors maintenant, je ne sais plus trop quoi choisir!!!
Peut etre refaire mes fonctions avec GetDateFormat, mais alors ou est l'intéret d'avoir ces fonctions????
Vive le C
Tchao
Savon