среда, 18 мая 2011 г.

Перевести время из одной зоны в другую

В 15-00 по времени Екатеринбурга (UTC+6) произошло некоторое событие.
В Красноярске (UTC+8) в это время уже 17-00, на два часа "больше".
Жителю Красноярска мы должны показать его местное время для этого события.

Как сделать это в C++?

Заполним структуру tmDateExternal типа tm, запишем в нее исходное время. Запишем в int nSrcTZ "смещение" UTC для исходного времени, то есть 6.
__time64_t t64date = _mkgmtime64(&tmDateExternal) - nSrcTZ*60*60;
tm tmDateLocal;
_localtime64_s( &tmDateLocal, &t64date );

Теперь в структуре tmDateLocal находится локальное время для исходного события.