2009-11-13 7 views
1

J'ai besoin d'une petite bibliothèque autonome en C sur la plate-forme Linux qui retournera "Vendredi" quand elle sera fournie avec (2009, 11, 13) par exemple. Je voudrais qu'il soit conscient des paramètres régionaux, c'est-à-dire qu'il renvoie les noms des jours et des mois dans la langue définie par l'utilisateur.Bibliothèque Linux datetime/locale en C

Des suggestions?

Répondre

1

Vous pouvez attacher ensemble mktime et strftime à faire:

char daybuf[20]; 
struct tm time_str; 

time_str.tm_year = YEAR - 1900; 
time_str.tm_mon = MONTH - 1; 
time_str.tm_mday = DAY; 
time_str.tm_hour = 0; 
time_str.tm_min = 0; 
time_str.tm_sec = 1; 
time_str.tm_isdst = -1; 
if (mktime(&time_str) != -1) 
    strftime(daybuf, sizeof(daybuf), "%A", &time_str); 
+0

Cela pourrait fonctionner, mais il sera influencé par configuration locale de l'application et si la mise en forme spécifique du nom de jour est trop long, il débordera le daybuf []. – dajobe

+0

@dajobe - la question demandait quelque chose de spécifique aux paramètres régionaux. De plus, il ne débordera pas daybuf car le second paramètre de strftime définit le nombre maximal de caractères qui seront écrits. –

+0

Il ne débordera pas le tampon mais laissera le tampon intact dans certains cas. Un exemple de cas de test d'échec pour ce code est l'environnement local ru_RU.UTF-8 et YEAR = 2009, MONTH = 11, DAY = 30. Cela donne le résultat "Понедельник" ("Monday"), qui ne rentre pas dans 20 octets (son stockage est de 23 octets si nous incluons l'octet zéro final). –