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

0

Я пытаюсь преобразовать время 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;
}

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

Теги:
datetime
epoch

1 ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню