我使用std :: localtime函數時遇到問題。當我將std :: time_t轉換爲本地結構tm時,它總是使用美國夏令時,而我想使用歐洲的(法國)。C++ std :: localtime夏令時規則(dst)歐洲vs美國
UTC:03/19/16 16:56在Local:03/19/16 18:56轉換。
在這個日期,通常,本地是17:56(UTC + 1)。 DST發生在法國27日。 經過多次測試,似乎使用的DST是基於美國的規則:DST發生在3月的第二個星期天。
我也改變了TZ environement變量,但它也失敗了。
`
if(putenv("TZ=CET-1CEST-2,M3.5.0/2,M10.5.0/3") != 0) {
std::cout << "Unable to set TZ" << std::endl;
} else {
tz = getenv("TZ");
if (tz) std::cout << tz << std::endl;
else std::cout << "TZ not defined" << std::endl; tzset();
}
struct std::tm t;
t.tm_sec = 0;
t.tm_min = 56;
t.tm_hour = 18;
t.tm_mday = 19;
t.tm_mon = 3-1;
t.tm_year = 2016-1900;
t.tm_isdst = -1;
std::time_t tt = std::mktime(&t);
std::cout << "UTC: " << std::put_time(std::gmtime(&tt), "%c %Z") << '\n'; // UTC : 03/19/16 16:56
std::cout << "local: " << std::put_time(std::localtime(&tt), "%c %Z") << '\n'; // Local : 03/19/16 18:56 (not waited result)
`
作爲精度,我使用bcc32c編譯器(Embarcadero的C++鐺基於計算機)。
我希望我很清楚,你可以幫助我。
在此先感謝
這可能是一個環境的事情太多,你是什麼操作系統? – Neil
你的環境是否有''? –
我使用的操作系統是Win 7 32位。我用 –