Как конвертировать время эпохи Unix в PST в Windows C++?

Я пытаюсь преобразовать время Unix Epoch в PST в Windows C++, но мой код не выполняется при преобразовании времени эпохи 03.09.2014 10:00. Программа сначала конвертирует время эпохи в GMT, затем вычитает 8 часов из GMT, но для отметки времени 10/03/2014 она выдает результат 03.09.2014 01:00 вместо 03.09.2014 02:00. Я использую версию Visual syudi 6.0.

Могу ли я знать, где мой код неверен.

#include "stdafx.h"
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include<ctime>

int main(int argc, char *argv[])
{
    struct tm * ptm;    
    time_t rawtime = 1394359200;        //  03/09/2014 10:00

    // -- convert UNIX timestamp to GMT time

    ptm = gmtime ( &rawtime );

    printf("\nBEFORE CONVERSION = %04d %02d %02d %02d %02d\n",ptm->tm_year+1900,(ptm-  >tm_mon)+1,ptm->tm_mday,ptm->tm_hour,ptm->tm_min);

    // -- Substract 8 hours from GMT time
    ptm->tm_hour = (ptm->tm_hour) - 8;

    // -- Make time after substaction 
    mktime ( ptm );

    printf("\nAFTER CONVERSION  = %04d %02d %02d %02d %02d\n",ptm->tm_year+1900,(ptm->tm_mon)+1,ptm->tm_mday,ptm->tm_hour,ptm->tm_min);

    return 0;
}

Заранее спасибо за помощь.

1 ответ

Вы на самом деле должны получить часовой пояс вашего компьютера и сделать расчеты (то есть: -8основанный на этом.

mktime устанавливает tzname тоже так что же модифицировал:

printf("\n%s\nAFTER CONVERSION  = %04d %02d %02d %02d %02d\n",
       *tzname,ptm->tm_year+1900,(ptm->tm_mon)+1,ptm->tm_mday,
        ptm->tm_hour,ptm->tm_min);

распечатать для вас название часового пояса?

Для меня ваше приложение печатает (с измененной линией) как:

BEFORE CONVERSION = 2014 03 09 10 00
CET
AFTER CONVERSION  = 2014 03 09 02 00
Другие вопросы по тегам