преобразование времени в 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 шт):

Автор решения: Fat-Zer

должно быть '15'. Почему получаю '8' не понимаю.

Видимо на твоей машине установлена зона UTC+7, а localtime() возвращает локальное время, для перевода unix-таймстемпов в UTC есть gmtime().

А как понять какой часовой пояс ?

Вообще говоря, с точки зрения Си реализация локального времени платформозависима. И интерфейсов для этого не предусмотрено. На современных POSIX-системух информацию о временной зоне можно получить из глобальных переменных tzname и timezone;

→ Ссылка