乙個簡單的需求,就是需要程式判斷當前系統的時間是不是在程式編譯之後的,如果系統當前時間在編譯之前,那說明這台機器的時間是不正確的,需要終止程式執行。
因為要在程式編譯時候獲取時間,如果每次編譯前手動修改的話,稍微顯得麻煩了一點。
vc中可以使用visual c + + 編譯器預定義的巨集來獲取編譯時間,有__date__
__time__
(這兩個是iso c99 和 iso c + + 14 標準預定義的巨集)__timestamp__
(這個是vs預定義的)三個巨集可以獲取,但是獲取到的是字串形式的時間,所以不太利於進行比較。
這裡寫乙個函式,用來獲取編譯時候的時間。
// 獲取編譯時間
void getcompiletime(lpsystemtime lpcompiletime)
sscanf_s(__time__, "%hu:%hu:%hu", &lpcompiletime->whour,
&lpcompiletime->wminute, &lpcompiletime->wsecond);
lpcompiletime->wdayofweek = lpcompiletime->wmilliseconds = 0;
}
因為編譯器給出的時間實際上是本地時間,所以這裡如果進行判斷的話,可以與getlocaltime
的結果進行比較。
systemtime lt, ct;
getlocaltime(<);
getcompiletime(&ct);
filetime flt, fct;
systemtimetofiletime(<, &flt);
systemtimetofiletime(&ct, &fct);
if (flt.dwhighdatetime < fct.dwhighdatetime ||
(flt.dwhighdatetime == fct.dwhighdatetime && flt.dwlowdatetime < fct.dwlowdatetime))
這裡沒有考慮不同時區的問題。
clang和gcc下可以使用__date__
和__time__
巨集來獲取編譯時間,這兩個在多位元組字元常量上與vs的處理有些不同。不多說,直接放**。
void getcompiletime(struct tm* lpcompiletime)
sscanf(__time__, "%d:%d:%d", &lpcompiletime->tm_hour,
&lpcompiletime->tm_min, &lpcompiletime->tm_sec);
lpcompiletime->tm_isdst = lpcompiletime->tm_wday = lpcompiletime->tm_yday = 0;
}
iOS App獲取編譯時間資訊
目前使用過的有2種 1.通過c語言特性的macro獲取 nsstring builddate nsstringstringwithformat s s date time 這是最簡單有效的方法。2.通過xcode的scheme來完成,xcode種的scheme可以部署在編譯前後可以自定義一些操作 選...
iOS ipa包編譯時間獲取
line 呼叫該巨集語句所在的行數,是個十進位制數 file 當前編譯的檔案的檔名 date 當前編譯的檔案的編譯日期 time 當前編譯的檔案的編譯時間 呼叫方式 nsstring builddate nsstring stringwithformat s s date time 或nsstrin...
C 獲取程式執行時間
命名空間 system.diagnostics stopwatch 例項可以測量乙個時間間隔的執行時間,也可以測量多個時間間隔的總執行時間。在典型的 stopwatch 方案中,先呼叫 start 方法,然後呼叫 stop 方法,最後使用 elapsed 屬性檢查執行時間。stopwatch 例項或...