我正在尝试在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;
}
提前感谢您的帮助。
答案 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