對於時間, c 闡述了這樣幾種概念:
1. clock tick: cpu時鐘計時單元
2. calender time: 日曆時間
3. broken-down time: 分解時間
4. local time: 本地時間
5. coordinate universal time: 協調世界時
我試用了前兩種計時方法:它們得到的結果都是以s為單位。無法精確到ms。後發現原來是因為它們得到的時間
都是整數型。相除後就是只取整了。例如下面的第一種方法:
clock_t clock_tick=clock();
double seconds = clock_tick/clocks_per_second;
如果得到clock_tick=160
得到的seconds=0
而我需要的是精確值,其實就是進行下強制型別轉換的。
即將上面的第二句**重新寫為:
double seconds = (double)clock_tick/(double)clocks_per_second;
這樣就可以得到精確值了。
2012.5.25
我又試了下我的omnet上面是要把clocks_per_second寫成clocks_per_sec才可以正常使用
clocks_per_second說是沒有定義。
不知道其他的軟體上是怎麼樣的。
前面三種可以理解為元資料型別, 分別對應於: clock_t, time_t, tm.
而後面兩種只是前三種型別的地域性表示.
第一種, clock tick(cpu時鐘計時單元)
它是一種時間計量單位, 可以和秒進行換算.
clock_t clock_tick = clock(); // 表示程式執行以來到執行完該語句所耗費
的cpu時鐘計時單元個數
long seconds = clock_tick / clocks_per_second; // 換算為秒
第二種, calender time(日曆時間)
它表示的是某一時間點距離原始時間點的秒數, 即它是以秒為單位的時間間隔.
而這個原始時間點, 不同的系統表示不同, 一般為2023年1月1日0時0分0秒, 而
在.net2005中為2023年12月30日0時0分0秒.
// 表示當前時間點距離原始時間點的秒數
time_t calender_time = time(null);
// 輔助函式
// double difftime(time_t time2, time_t time1)
// 計算二者的秒數之差
第三種, broken-down time(分解時間)
它表示的是結構體, 成員包括年月\日時\分秒(其他省略).
// 先得到當前的日曆時間
time_t calender_time = time(null);
// 將日曆時間轉換為當前時區的分解時間
tm* local_time = localtime(&calender_time);
// 這裡提到了當前時區的分解時間, 即本地時間. 因為日期時間
// 因時區的不同而各異,
// 例如: 北京位於東八區.
// 格林威治時間是統一的世界時間, 即上面提到的協調世界時間
// 這裡將日曆時間轉換成格林威治式的分解時間
tm* utc_time = gmtime(&calender_time);
三種時間元型別給了我們很好的靈活性, 但也有值得注意的地方:
1. 可以直接獲取當前的日曆時間.
time_t calender_time = time(null);
2. 只能間接獲取當前的分解時間, 借助localtime()函式進行轉換
time_t calender_time = time(null);
tm* local_date = localtime(&calender_time);
3. 日曆時間可以轉化為日期的字串表示
time_t calender_time;
// 賦值省略
char* szdate = ctime(calender_time);
4. 分解時間可以轉化為日期的字串表示
tm* date;
// 賦值省略
char* szdate = asctime(date);
5. 分解時間可以直接轉換為日曆時間
tm date;
// 賦值省略
time_t time = mktime(&date);
6. 日曆時間可以轉換為分解時間
time_t time;
// 賦值省略
tm* date = localtime(&time);
7. 分解時間可以格式化輸出
// 借助strftime函式以及printf等函式
Windows程式設計之時間
查msdn可以看到,windows中的時間分為以下幾類 format type description system systemtime year,month,day,hour,second,and millisecond,taken from the internal hardware cloc...
linux下socket程式設計之時間伺服器
為網路上的使用者提供時間服務,即為網路使用者返回伺服器的當前時間 記錄發出請求的網路使用者的ip位址 儲存到檔案中 編寫時間服務客戶端timeclient,該客戶端能夠向伺服器傳送時間服務請求,並把獲得的時間返回給使用者。開發環境 fedora13,vim,gcc timeserver.c檔案。in...
獲取當前時間 使用標準C
大家可能在開發過程中經常會遇到獲取當前系統時間的問題。那麼除了mfc中的ctime類外,有沒有其他的方法呢?答案是肯定的。很多c c 的初學者在學習這門語言的時候,經常是只注意其語法,而其庫函式卻知道的很少。有的知道一些,但是卻很少應用。筆者在這裡建議大家,經常去看看標準c庫,標準c 庫。如果能在開...