преобразование времени в UNIX формате в формат dd.mm.yy hh:mm:ss с помощью библиотеки 'time.h'
Пытаюсь преобразовать время в в UNIX формате в формат dd.mm.yy hh:mm:ss с помощью библиотеки 'time.h'.
Для этого сделал:
time_t rawtime = (time_t)datatime;
struct tm ts;
ts = *localtime(&rawtime);
modifyFileHeaderList.date.day = ts.tm_mday;
modifyFileHeaderList.date.mounts = ts.tm_mon;
modifyFileHeaderList.date.year = ts.tm_year - 100;
modifyFileHeaderList.time.hour = ts.tm_hour;
modifyFileHeaderList.time.min = ts.tm_min;
modifyFileHeaderList.time.sec = ts.tm_sec;
Где datatime число формата uint32_t и равно '1619424306' что соответствует Mon Apr 26 2021 15:05:06 UTC но я получаю в поле часы 'ts.tm_hour' число '8' а должно быть '15'. Почему получаю '8' не понимаю.
Ответы (1 шт):
должно быть '15'. Почему получаю '8' не понимаю.
Видимо на твоей машине установлена зона UTC+7, а localtime() возвращает локальное время, для перевода unix-таймстемпов в UTC есть gmtime().
А как понять какой часовой пояс ?
Вообще говоря, с точки зрения Си реализация локального времени платформозависима. И интерфейсов для этого не предусмотрено. На современных POSIX-системух информацию о временной зоне можно получить из глобальных переменных tzname и timezone;