我想獲取當前時間(UTC + 8),當地時間爲UTC-5。使用mktime計算錯誤的時間以獲取UTC + 8
使用和運行在VS2012如下:
#pragma warning(disable : 4996)
char buffer[10];
time_t rawtime;
time(&rawtime);
strftime(buffer, 10, "%H:%M:%S", localtime(&rawtime));
cout << "LocalTime=" << buffer << endl;
strftime(buffer, 10, "%H:%M:%S", gmtime(&rawtime));
cout << "GMTime=" << buffer << endl;
tm* r = gmtime(&rawtime);
r->tm_hour += 8; // Hong Kong time
mktime(r); // Normalize the struct
strftime(buffer, 10, "%H:%M:%S", r);
cout << "HongKongTime=" << buffer << endl;
產生以下輸出:
LocalTime=22:51:47
GMTime=02:51:47
HongKongTime=11:51:47
所以它的正確計算UTC,但後來加入8小時,實際上是生產時間是UTC +9。出了什麼問題?
是否有一個更優雅/可靠的方式得到UTC + 8比這個kludge?
的第一件事情,一個出問題是DST(夏令時間)。有一個更好的方法?我很好奇自己看到答案... – marom
是的,夏令時是我的第一個猜測,但它使UTC正確。 – feetwet