2012-06-01 42 views
0

假設今天是星期一。我想知道上個星期三的日期。找出最近N天的DST安全時間

我認爲邏輯是 1)沒有從今天天差於上週六(即6) 2)從今天

time_t now = time(0); 
// determine the no of day differences i.e 6 
time_t lastWeekTime = now - (86400 * 6); 

那些。減去多少秒這不是DST安全。有人能告訴我我需要在這裏照顧什麼嗎?

在此先感謝

+1

這是正確的1 1970 UTC「](http://en.cppreference.com/w/cpp/chrono/c/time_t)。沒有DST在這裏。 –

+0

@ChristianAmmer:如果自開始日期以來DST更改發生的次數爲奇數,它將每天關閉一小時,每天一小時。 – MSalters

回答

0

你可以轉換使用localtime爲tm結構的time_t的。這個結構體包含了天的值 - 你可以加/減。如果需要,您只需確保您更改月份/年份。正確更改後,您可以使用mktime將其轉換回來。

尷尬但可管理。通過這種方式,您不需要了解DST,但只需瞭解有關天數/月和月/年的信息。

更好的方法很可能是使用Boost Date Time

0

日期沒有DST的概念,即僅適用於日期時間,因爲你需要一天的小數部分,如果你形容在切換之前或之後。因此,2012年6月1日星期五始終是2012年6月1日星期五,無論當天有多少DST交換機發生,或者那一天或之前發生了多少次DST交換機。

你的方式已經是正確的方法,time()會給你,因爲(UNIX)時代的秒數和規模不遵守夏令開關,所以lastWeekTime % 86400將是完全一樣now % 86400(按你的實際計算)。因此,如果您只需要日期,請確保不要打印時間分量,例如從結果中減去now % 86400,僅使用UTC功能(gmtime()/timegm())。

如果您想要類似的東西:今天是星期一,並且在11:00有預約。我想把它移回N天前。然後使用你的算法從週一去N天背部和手動設置時間部分:自00:00,揚[」 ...... time_t的幾乎總是抱着的秒數積分值:

time_t now = time(NULL); 
time_t then = now - 86400 * N; 
time_t then_eleven = (then - then % 86400) + 11 * 3600;