Как конвертировать время эпохи 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