Допустим, мне дали строку, такую как это: "2009-4-9"
, что означает 9 апреля 2009 года. Предполагая для начала, что меня интересует только местное время (у меня есть проблемы и с другими часовыми поясами, но ясначала займусь легкими вещами).Как лучше всего узнать, действовало ли в то время летнее время?
Можно предположить, что в системе правильно обновлены файлы часовых поясов, такие как /etc/localtime
, и я заинтересован в портативных решениях.Также приемлемы c или c ++.
Вы также можете предположить, что я забочусь только о прошлых или настоящих датах, а не о будущем.
В настоящее время у меня есть "взлом", который выглядит так(Я знаю, что localtime_r - это расширение библиотеки, но оно достаточно близко к той же функциональности, что я могу сделать его переносимым)
struct tm tm;
// convert the time string to a broken down structure in localtime
if(strptime("2009-4-9", "%Y-%m-%d", &tm)) {
// convert the broken down structure into seconds since epoch
const time_t t = mktime(&tm);
// convert it back to a broken down structure, this seems pointless at first...
// but libc will fill out fields such as tm_isdst
localtime_r(&t, &tm);
printf("DST : %d\n", tm.tm_isdst);
}
Хотя это работает (и кажется довольно эффективным способом), я чувствую, чтоглупо конвертировать туда и обратно.Есть ли лучший способ?