ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 13.12.2020
Просмотров: 4267
Скачиваний: 28
Часть III. Стандартная библиотека языка программирования C
396
t = time(NULL);
s = ctime(&t);
printf("Time: %s\n", s);
return 0;
}
34.9. Преобразование представления
времени из структуры в строку
Для преобразования времени, представленного структурой, в
строку с информацией о времени, предназначена функция
asctime
, которая имеет следующий прототип:
char *asctime(const struct tm *tptr);
где параметр
tptr
должен указывать на календарное время, пред-
ставленное структурой типа
tm
. Функция возвращает адрес стро-
ки, содержащей информацию о календарном времени.
В листинге 34.6 приведен пример использования функции
asctime
.
Листинг 34.6. Пример использования функции
asctime
#include <stdio.h>
#include <time.h>
int main ()
{
time_t t;
struct tm *p;
char* s;
t = time(NULL);
p = gmtime(&t);
s = asctime(p);
printf("Time: %s\n", s);
return 0;
}
Глава 34. Работа с датами и временем <time.h>
397
34.10. Форматирование представления
времени в строке
Для преобразования времени, представленного структурой, в от-
форматированную строку с информацией о времени предназна-
чена функция
strftime
, которая имеет следующий прототип:
size_t strftime(char *s, size_t n, const char *format,
const struct tm *tptr);
Опишем назначение параметров этой функции.
Параметр
s
должен указывать на массив символов, в который
функция запишет отформатированную информацию о календар-
ном времени.
Параметр
n
должен содержать длину массива, на который указы-
вает параметр
s
.
Параметр
format
должен указывать на строку, в которой содер-
жатся спецификаторы преобразования для представления време-
ни в массиве, на который указывает параметр
s
. Каждый специ-
фикатор преобразования начинается с символа
%
, за которым сле-
дует символ, указывающий формат преставления времени и даты.
Спецификаторы преобразования приведены в табл. 34.1. Функция
strftime
сканирует строку
format
и для каждого спецификатора
преобразования записывает в строку
s
соответствующую после-
довательность символов. После завершения преобразования фор-
матов функция записывает в массив
s
пустой символ.
Если при сканировании строки
format
функция встретит длинный
(multibyte) символ, отличный от символа
%
, то функция перепи-
сывает его в массив
s
.
Параметр
tptr
должен указывать на календарное время, пред-
ставленное структурой типа
tm
. Это календарное время будет
преобразовано в строку в соответствии с форматом, заданным
параметром
format
, и записано в массив, на который указывает
параметр
s
.
Часть III. Стандартная библиотека языка программирования C
398
Таблица 34.1.
Спецификаторы преобразования
календарного времени
Спецификатор Назначение спецификатора
Пример
%a
Сокращенное название дня
недели
Sun
%A
Полное название дня недели
Sunday
%b
Сокращенное название месяца
Dec
%B
Полное название месяца
December
%c
Дата и время
Dec 2 06:55:15
1979
%d
День недели
02
%H
Час суток (длина суток – 24 часа)
16
%I
Час дня (длина дня – 12 часов)
06
%j
День года, начиная с 001
335
%m
Месяц года, начиная с 001
12
%M
Минуты часа
55
%p
AM/PM индикатор
AM
%S
Секунды минуты
15
%U
Неделя года, начиная с 00.
Неделя начинается в воскресенье
48
%w
День недели, начиная с 0
6
%W
Неделя года, начиная с 00 Неделя
начинается с понедельника
47
%x
Дата
Dec 2 1979
%X
Время
06:55:15
%y
Год века, начиная с 00
79
%Y
Год
1979
%Z
Название временной зоны, если
оно есть
EST
%%
Знак процента
%
Глава 34. Работа с датами и временем <time.h>
399
При успешном завершении функция возвращает количество сим-
волов, записанных в массив
s
. Функция завершается успешно,
если значение параметра
n
больше чем количество символов, за-
писанных в массив
s
. В противном случае функция возвращает
0
.
На форматирование времени влияет значение локальной катего-
рии
LC_TIME
. Локальные категории и работа с ними описаны
в
гл. 33
.
В листинге 34.7 приведен пример использования функции
strftime
.
Листинг 34.7. Пример использования функции
strftime
#include <stdio.h>
#include <time.h>
int main ()
{
time_t t;
struct tm *p;
char s[80];
char* format = "%A %B %Y";
t = time(NULL);
p = gmtime(&t);
if (strftime(s, 80, format, p))
printf("Time: %s\n", s);
else
printf("strftime failed.\n");
return 0;
}
Часть III. Стандартная библиотека языка программирования C
400