2013-02-05 91 views
3

如果我使用C++時差(timediff)函數來計算2次之間的差異,並且稍後時間在日光節省的時間更改之後,返回的差異將計算此值。C++時差函數是否計算夏令時?

E.g.我的時間是23:00和11:00。這段時間中間的時間變化,即向前一小時。

我會得到12小時還是11小時?

+0

我找不到任何叫做timediff的函數,你能顯示代碼嗎?如果你的意思是Cs difftime,那麼這兩個參數都是time_t(自紀元以來的秒數),所以沒有任何意義可以談論任何時區/ dst – PlasmaHH

+0

http://www.cplusplus.com/reference/ctime/difftime/看來問題歸結爲數據問題。 –

回答

1

該功能是difftime,而不是timediff。它需要兩個 time_t作爲參數; time_t通常代表UTC,而不是 特定的本地時間,所以夏令時問題不會發生。

+1

它不是「典型地代表UTC」,它通常代表自紀元以來的秒數,即從特定時間點開始經過的秒數。如果您嘗試將該秒轉換爲具有數天,數小時等的表示形式,那麼時區只會涉及到那裏。 – PlasmaHH

+0

@PlasmaHH由於紀元是以UTC來指定的,因此它代表UTC的時間。從正式的角度來看,你是完全正確的,但是我用更通用的方式來說話:我們使用'time_t'作爲時間的表示(例如文件的最後修改時間),以及它表示時間因爲我們也可以用它來表示和間隔),那個時間是UTC。表示實際上是從特定時間點開始的時間間隔的事實或多或少是實現細節。 (當然,當我們把它當作一個時間使用的時候) –

+0

我發現那個把它當做實現細節的想法正在混淆人們的地獄。他們開始做一些事情,比如希望將UTC的time_t轉換爲UTC,或者類似的時間。儘管正式的規範引用了UTC(也許00:00 1.1.1970更容易記住)是正確的,但當您在時區中指定時期時,SSE的值沒有區別。因此,我通常堅持上海證券交易所「不佔用時區」,並且發現這對於人們來說更容易理解,因爲即使沒有任何時區,上證所也具有真正的意義。 – PlasmaHH

0

是的,你會的。在Y2k的日子裏,我必須在Visual Studio 6中處理它。然後他們改變了DST規則,使代碼無效。

如果你看到一個小時向前的神祕跳躍,並且一個小時後,它是DST在RTL中飼養它醜陋的頭。