Книга: Linux программирование в примерах

13.2.7. Форматирование значений даты и времени: ctime() и strftime()

13.2.7. Форматирование значений даты и времени: ctime() и strftime()

В разделе 6.1 «Времена и даты» описаны функции для получения и форматирования значений времени и даты. Функция strftime() также может использовать локаль, если setlocale() была вызвана должным образом. Это демонстрирует следующая простая программа, ch13-times.с:

/* ch13-times.c --- демонстрация времени на основе локали */
#include <stdio.h>
#include <locale.h>
#include <time.h>
int main(void) {
 char buf[100];
 time_t now;
 struct tm *curtime;
 setlocale(LC_ALL, "");
 time(&now);
 curtime = localtime(&now);
 (void)strftime(buf, sizeof buf,
  "It is now %A, %B %d, %Y, %I:%M %p", curtime);
 printf("%sn", buf);
 printf("ctime() says: %s", ctime(&now));
 exit(0);
}

При запуске программы мы видим, что результаты strftime() в самом деле варьируют, тогда как результаты ctime() — нет:

$ LC_ALL=en_US ch13-times /* Время в Соединенных Штатах */
It is now Friday, July 11, 2003, 10:35 AM
ctime() says: Fri Jul 11 10:35:55 2003
$ LC_ALL=it_IT ch13-times /* Время в Италии */
It is now venerdi, luglio 11, 2003, 10:36
ctime() says: Fri Jul 11 10:36:00 2003
$ LC_ALL=fr_FR ch13-times /* Время во Франции */
It is now vendredi, juillet 11, 2003, 10:36
ctime() says: Fri Jul 11 10:36:05 2003

Причина отсутствия изменений в том, что ctime()asctime(), на которой основана ctime()) является традиционным интерфейсом; он существует для поддержки старого кода, strftime(), будучи более новым интерфейсом (первоначально разработанным для C89), свободен использовать локали.

Оглавление книги


Генерация: 1.345. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз