Книга: 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), свободен использовать локали.
- 13.2.1. Категории локалей и переменные окружения
- 13.2.2. Установка локали: setlocale()
- 13.2.3. Сравнение строк: strcoll() и strxfrm()
- 13.2.4. Числовое и денежное низкоуровневое форматирование: localeconv()
- 13.2.5. Высокоуровневое числовое и денежное форматирование: strfmon() и printf()
- 13.2.6. Пример: форматирование числовых значений в gawk
- 13.2.7. Форматирование значений даты и времени: ctime() и strftime()
- 13.2.8. Другие данные локали: nl_langinfo()
- 6.1. Времена и даты
- 6.1.3. Форматирование даты и времени
- Пробелы в литералах даты
- Множественное присвоение значений:
- Уменьшение времени, необходимого для резервного копирования и восстановления
- Ограничение времени ожидания для транзакций (Lock timeout)
- 7.12. Объективизация времени
- Квант времени
- Формула времени. Тайм-менеджмент на Outlook 2013
- Как в документ Microsoft Word вставить текст, в котором отсутствует форматирование?
- Трюки с форматированием
- Установка значений спин-счетчиков