Я пытаюсь преобразовать время Unix Epoch в PST в Windows C++, но мой код не работает при конвертировании времени эпохи 03/09/2014 10:00. Программа сначала конвертирует эпоху в GMT, затем вычитает 8 часов с GMT, но за 03/09/2014 10:00 отметка времени дает результат 03/09/2014 01:00 вместо 03/09/2012 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;
}
Заранее спасибо за помощь.
Фактически вы должны получить часовой пояс своего компьютера и выполнить вычисления (то есть: -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