2015-02-25 6 views
1

Есть ли что-то в стандартных библиотеках C/C++, которые заполнят struct tm?Populate struct tm

Более конкретно о моей проблеме: я хочу иметь возможность указать дату и заполнить struct tm от этого (например: 1-1-2000 00:00:01.) Для большинства полей я могу просто вставьте данные, но я просто не знаю tm_wday и tm_isdst.

Я действительно ищу способ заполнить эти два без, написав какой-то сложный рабочий день недели.

+0

В большинстве случаев они вам не нужны. Игнорировать их или установить на 0 – ForceBru

+0

@ForceBru Нет, нет, я * хочу * их. Я хочу вывести их из своей программы. –

+0

['mktime'] (http://en.cppreference.com/w/cpp/chrono/c/mktime) на самом деле задан для выполнения нормализации переданного' tm'. –

ответ

5

mktime звучит как ваш лучший выбор. struct tm, который вы передаете ему, не обязательно должны иметь значения в указанных диапазонах; он нормализует поля, включая пересчет tm_wday и tm_yday. Чтобы попытаться определить, действует ли DST, установите для параметра tm_isdst значение отрицательный, прежде чем вы вызовете mktime.

Если вы конвертируете из строки, вы можете использовать манипулятор get_time для извлечения информации в tm.

3

Вы хотите mktime:

Исходные значения tm_wday и tm_yday компонентов структуры игнорируются, а исходные значения других компонентов не ограничивается в пределах, указанных выше.

Это mktime может использоваться как некоторая функция нормализации, которая гарантирует, что после этого все поля будут согласованы.