std::mktime
| Определено в заголовочном файле <ctime>
|
||
std::time_t mktime( std::tm* time ); |
||
Преобразует время по местному календарю во время, начиная с начала эпохи, как объект std::time_t. time->tm_wday и time->tm_yday игнорируются. Значения в time могут быть за пределами своих нормальных диапазонов.
Отрицательное значение time->tm_isdst заставляет mktime попытаться определить, действовало ли летнее время.
Если преобразование прошло успешно, объект time изменяется. Все поля time обновляются, чтобы соответствовать их правильным диапазонам. time->tm_wday и time->tm_yday пересчитываются с использованием информации, доступной в других полях.
Параметры
| time | — | указатель на объект std::tm, указывающий местное календарное время для преобразования |
Возвращаемое значение
Время с начала эпохи в виде объекта std::time_t в случае успеха или -1, если time не может быть представлено в виде объекта std::time_t.
Примечание
Если объект std::tm был получен из std::get_time или POSIX функции strptime, значение tm_isdst неопределенно и должно быть задано явно перед вызовом mktime.
Пример
Явно создаём местное время.
#include <iostream>
#include <sstream>
#include <iomanip>
#include <ctime>
int main()
{
setenv("TZ", "/usr/share/zoneinfo/America/Los_Angeles", 1); // специфично для POSIX
std::tm tm{}; // Инициализация нулём
tm.tm_year = 2020-1900; // 2020
tm.tm_mon = 2-1; // Февраль
tm.tm_mday = 15; // 15-е
tm.tm_hour = 10;
tm.tm_min = 15;
tm.tm_isdst = 0; // Нет перехода на летнее время
std::time_t t = std::mktime(&tm);
std::tm local = *std::localtime(&t);
std::cout << "локальное: " << std::put_time(&local, "%c %Z") << '\n';
}
Возможный вывод:
локальное: Sat Feb 15 10:15:00 2020 PST
Смотрите также
| преобразует время с начала эпохи в календарное время, выраженное как местное время (функция) | |
Документация C по mktime
| |