问题:time_t 在英文操作系统且系统时区为东八区之前的时区,获取的“当前时间戳”比实际当前时间戳少了3600秒
代码如下:
方式一是有bug的方法
方式二是正常的方法
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <string>
#include <iostream>
#include <time.h>
using namespace std;
// 方式一:这种方式在英文版操作系统且系统时区为东八区之前的时区,获取的“当前时间”比实际当前时间少了一个小时
time_t GetLocalTimestampA()
{
time_t timeNow;
time(&timeNow);
return timeNow;
}
// 方式二
time_t GetLocalTimestampB()
{
time_t timeNow;
struct tm tmNow;
time(&timeNow);
localtime_s(&tmNow, &timeNow);
return mktime(&tmNow);
// 先把时间戳转成字符串
char szBuf[128];
sprintf(szBuf, "%d-%02d-%02d %02d:%02d:%02d", tmNow.tm_year + 1900, tmNow.tm_mon + 1, tmNow.tm_mday, tmNow.tm_hour, tmNow.tm_min, tmNow.tm_sec);
// 再从字符串转成时间戳
struct tm tmTime = { 0 };
sscanf_s(szBuf, "%d-%d-%d %d:%d:%d", &tmTime.tm_year, &tmTime.tm_mon, &tmTime.tm_mday, &tmTime.tm_hour, &tmTime.tm_min, &tmTime.tm_sec);
tmTime.tm_year -= 1900;
tmTime.tm_mon -= 1;
time_t ttTime = mktime(&tmTime);
return ttTime;
}
int main()
{
cout << "GetLocalTimestampA:" << GetLocalTimestampA() << endl;
cout << "GetLocalTimestampB:" << GetLocalTimestampB() << endl;
system("pause");
return 0;
}