假設今天是星期一。我想知道上個星期三的日期。找出最近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安全。有人能告訴我我需要在這裏照顧什麼嗎?
在此先感謝
假設今天是星期一。我想知道上個星期三的日期。找出最近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安全。有人能告訴我我需要在這裏照顧什麼嗎?
在此先感謝
你可以轉換使用localtime爲tm結構的time_t的。這個結構體包含了天的值 - 你可以加/減。如果需要,您只需確保您更改月份/年份。正確更改後,您可以使用mktime將其轉換回來。
尷尬但可管理。通過這種方式,您不需要了解DST,但只需瞭解有關天數/月和月/年的信息。
更好的方法很可能是使用Boost Date Time
日期沒有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;
這是正確的1 1970 UTC「](http://en.cppreference.com/w/cpp/chrono/c/time_t)。沒有DST在這裏。 –
@ChristianAmmer:如果自開始日期以來DST更改發生的次數爲奇數,它將每天關閉一小時,每天一小時。 – MSalters