如何在Windows C ++中将Unix Epoch时间转换为PST?

时间:2014-03-05 13:51:20

标签: c++ windows unix datetime epoch

我正在尝试在Windows C ++中将Unix Epoch时间转换为PST但我的代码在转换03/09/2014 10:00的纪元时间时失败。该程序首先将纪元时间转换为格林尼治标准时间,然后从格林威治标准时间减去8小时,但是对于03/09/2014 10:00时间戳,它将输出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 个答案:

答案 0 :(得分: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