我的時區是美國東部標準時間,它比UTC晚5個小時。假設:將UTC轉換爲本地
struct tm t = { 0, 30, 15, 10, 3, 112, 0, 0, -1 };
time_t utc_in_timet = _mkgmtime(&t);
struct tm tt = { 0 };
localtime_s(&tt, &utc_in_timet);
當localtime_s返回時tt關閉一小時。我在那裏11:30而不是10:30。
我錯過了什麼?
我的時區是美國東部標準時間,它比UTC晚5個小時。假設:將UTC轉換爲本地
struct tm t = { 0, 30, 15, 10, 3, 112, 0, 0, -1 };
time_t utc_in_timet = _mkgmtime(&t);
struct tm tt = { 0 };
localtime_s(&tt, &utc_in_timet);
當localtime_s返回時tt關閉一小時。我在那裏11:30而不是10:30。
我錯過了什麼?
我已經在我的機器上試過了你的代碼,它能正常工作(我的時區是GMT + 2)。由於您告訴系統自行檢查夏令時(tm
的最後一個參數是-1
),因此它實際上是使用EDT,因此會給您GMT-4。
您可以嘗試用2
替換月份(3
),以便日期爲3月10日,即夏令時更改之前;我敢打賭,在這種情況下你會得到預期的10:30。
我認爲這與夏令時有關。你確定你的時區目前是EST(-5)嗎?因爲你的系統似乎應該使用EDT(-4)?
我的時區最明確地設置爲EST。除此之外,即使一位同事在英國嘗試過,該代碼也會關閉一個小時。我相信它返回16:30當localtime_s返回(或14:30 - 我不記得哪個) – ForeverLearning 2012-04-10 15:34:52
那麼,我也試過這個:http://www.timeanddate.com/worldclock/converter.html當我轉換到EST-New York,它會自動使用夏令時。我也對美國東部時間給出了這樣的警告:「目前只有部分地點位於東部時區,因爲大多數地方目前都有夏令時。」所以我真的認爲您使用的時區是夏令時(= EDT)的時區 – rve 2012-04-10 16:14:43
驗證您的本地時區。英格蘭(如倫敦)和美國東海岸目前都是夏令時,所以這看起來是問題(正如已經提到的人)。對於美國東海岸來說,美國東部時間有4小時不同。
我也注意到了。將tm_isdst設置爲1幾乎具有相同的效果,對吧? – ForeverLearning 2012-04-10 16:05:56
必須有一些通用的方式將UTC轉換爲當地時間,方法是將夏時制節能化,對吧? – ForeverLearning 2012-04-10 19:14:12
是的,在這種情況下,將'tm_isdst'設置爲'1'會有相同的效果。 – Gorpik 2012-04-12 06:38:13