Преобразовать локальное время в системное время
#include <time.h>time_t mktime( struct tm *timeptr );
libc
Функция mktime() преобразует локальное время в структуре struct tm, указанной в timeptr, в системное время (всемирное координированное время - UTC).
Исходные значения полей tm_sec, tm_min, tm_hour, tm_mday и tm_mon не ограничены диапазонами, описанными в struct tm. Если значения этих полей не находятся в соответствующих диапазонах, они корректируются так, чтобы находиться в них. Значения полей tm_wday и tm_yday вычисляются после того, как были скорректированы значения остальных полей.
Исходное значение поля tm_isdst интерпретируется следующим образом:
Вызов функции mktime() приводит также к вызову функции tzset().
Преобразованное системное время, или -1
, если функция mktime() не смогла его преобразовать.
#include <stdio.h>#include <stdlib.h>#include <time.h>static const char *week_day[] = {"Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday"};int main( void ){struct tm new_year;time_t t;new_year.tm_year = 2001 - 1900;new_year.tm_mon = 0;new_year.tm_mday = 1;new_year.tm_hour = 0;new_year.tm_min = 0;new_year.tm_sec = 0;new_year.tm_isdst = 0;t = mktime( &new_year );if ( t == (time_t)-1 )printf( "Преобразование не возможно.\n" );elseprintf( "XXI век начался в %s.\n",week_day[ new_year.tm_wday ] );return (EXIT_SUCCESS);}
Код генерирует следующий вывод:
$ ./a.out XXI век начался в Monday.
ANSI, POSIX 1003.1
time_t, asctime(), asctime_r(), clock(), ctime(), ctime_r(), difftime(), gmtime(), gmtime_r(), localtime(), localtime_r(), strftime(), time(), struct tm, tzset()
Предыдущий раздел: Описание API системной библиотеки