В соответствии со стандартом, mktime
должен выполнить нормализацию - когда вы хотите добавить полторы минуты к struct tm
, вы добавляете 90 секунд к tm_sec
и вызываете mktime
, игнорируя его возвращаемое значение.
Что я не нашел в стандарте, так это то, что параметр нормализован, даже если он не может быть представлен в time_t
(например, если год установлен на 2100).
Итак, этокод безопасный?
struct tm future;
memset(&future, 0, sizeof(future));
future.tm_mon = 1;
future.tm_sec = 90; //I want this to be normalised by mktime
future.tm_year = 200; //but this can cause troubles
mktime(&future);
//future.tm_sec should be 30
//future.tm_min should be 1
//future.tm_year should be still 200