Терминология
Дата / время могут быть в двух форматах:
- календарное время (a.k.a. simpletime) - время как абсолютное значение, обычно начиная с некоторого базового времени, часто называемого всемирным координированным временем
- местное время (например, разбитое время) - календарное время, состоящее из компонентов года, месяца, дня и т. Д., Которое учитывает местный часовой пояс, включая летнее время, если применимо.
Типы данных
Функции и типы даты / времени объявлены в заголовочном файле time.h.
Время может быть сохранено как целое число или как экземпляр структуры:
как число, использующее арифметический тип time_t - для сохранения календарного времени в виде количества секунд, прошедших с начала UNIX 1 января 1970 года 00: 00: 00
с использованием структуры timeval - для сохранения календарного времени в виде количества секунд и наносекунд, прошедших с эпохи UNIX 1 января 1970 г. 00: 00: 00
, использующий структуру tm для хранения локального времени, он содержит такие атрибуты, как:
tm_hour
tm_min
tm_isdst
Приведенный выше атрибут tm_isdst используется для указания летнего времени (DST). Если значение положительное, то это DST, если значение 0, то это не DST.
Программа для печати текущего всемирного координированного времени
#include <stdio.h>
#include <time.h>
int main ( int argc, char *argv[] )
{
time_t now;
now = time ( NULL );
printf ( "It’s %ld seconds since January 1, 1970 00:00:00", (long) now );
return 0;
}
В программе выше функции время считывает системное время UNIX, вычитает его с 1 января 1970 года 00:00:00 (эпоха UNIX) и возвращает его результат в секундах.
Программа для печати текущего местного времени
#include <stdio.h>
#include <time.h>
int main ( int argc, char *argv[] )
{
time_t now;
struct tm *lcltime;
now = time ( NULL );
lcltime = localtime ( &now );
printf ( "The time is %d:%d\n", lcltime->tm_hour, lcltime->tm_min );
return 0;
}
В программе выше функции localtime преобразует прошедшее время в секундах с эпохи UNIX в сломанное время. localtime читает окружение UNIX TZ (через вызов функции tzset), чтобы вернуть время относительно часового пояса и установить атрибут tm_isdst.
Типичная настройка переменной TZ в UNIX (с использованием bash) будет выглядеть следующим образом:
export TZ=GMT
или
export TZ=US/Eastern
Программа для печати текущего отформатированного среднего времени по Гринвичу
#include <stdio.h>
#include <time.h>
int main ( int argc, char *argv[] )
{
time_t now;
struct tm *gmt;
char formatted_gmt [50];
now = time ( NULL );
gmt = gmtime ( &now );
strftime ( formatted_gmt, sizeof(formatted_gmt), "%I:%M %p", gmt );
printf ( "The time is %s\n", formatted_gmt );
return 0;
}
В программе выше функция strftime обеспечивает специализированное форматирование дат.
Другие вопросы для рассмотрения