1. c語言中difftime(end,start)函數可被end-start表達式所取代嗎 我測試了幾組數,貌似是可以的。有知道的
time_t
type
<ctime>
Time type
Type capable of representing times and support arithmetical operations.
This type is returned by the time function and is used as parameter by some other functions of the <ctime> header.
It is almost universally expected to be an integral value representing the number of seconds elapsed since 00:00 hours, Jan 1, 1970 UTC. This is e to historical reasons, since it corresponds to a unix timestamp, but is widely implemented in C libraries across all platforms.
指正樓上答案
請點擊參考資料進行詳細閱讀
很多問題要從根源上查閱,而不是去聽取別人的答案。
像這種標准函數的問題,查下它的幫助文檔就可以了,文檔才是最權威的。
文檔上寫的清楚,返回值是The difference in seconds (time2-time1) as a floating point double.這個函數的作用也就在於此,保證返回值為兩個時間所差的秒數。
而time_t的類型It is almost universally expected to be an integral value representing the number of seconds elapsed since 00:00 hours, Jan 1, 1970 UTC. 幾乎但並不確保所有都是以秒為單位,這就是區別所在。用difftime具有更強的可移植性。在不是很特別的系統上,兩值之差是可以取代difftime這個函數的。
2. C語言的比較兩個時間的函數
1、方法一:若時間為結構體變數,比較兩個時間的大小,而且不能改變時間的值,可以是:
int timecmp(date_t* date1,date_t* date2)
{
if(date1-> year==date1-> year)
return memcmp(date1, date2,sizeof(date_t));
else
return date1-> year-date2-> year
}
2、方法二:
long getTimeInterval(const char *t1, const char *t2) {
struct tm tm1, tm2;
time_t start, end;
double diff;
memset(&tm1, 0, sizeof(tm1));
memset(&tm2, 0, sizeof(tm2));
strptime(t1, "%Y%m%d", &tm1);
start = mktime(&tm1);
strptime(t2, "%Y%m%d", &tm2);
end = mktime(&tm2);
diff = difftime(start, end);
return d2l(diff);
}
調用:
printf("getTimeInterval=[%ld]\n", getTimeInterval("20101221", "20110326"));
printf("getTimeInterval=[%ld]\n", getTimeInterval("20101221", "20990326"));
第一行輸出:[-8208000]
第二行輸出:[1292860801]
3、補充:C語言時間函數:
(1)、獲得日歷時間函數:
可以通過time()函數來獲得日歷時間(Calendar Time),其原型為:time_t time(time_t * timer);
如果已經聲明了參數timer,可以從參數timer返回現在的日歷時間,同時也可以通過返回值返回現在的日歷時間,即從一個時間點(例如:1970年
1月1日0時0分0秒)到現在此時的秒數。如果參數為空(NUL),函數將只通過返回值返回現在的日歷時間,比如下面這個例子用來顯示當前的日歷時間:
(2)、獲得日期和時間函數:
這里說的日期和時間就是平時所說的年、月、日、時、分、秒等信息。從第2節我們已經知道這些信息都保存在一個名為tm的結構體中,那麼如何將一個日歷時間保存為一個tm結構的對象呢?
其中可以使用的函數是gmtime()和localtime(),這兩個函數的原型為:
struct tm * gmtime(const time_t *timer);
struct tm * localtime(const time_t * timer);
其中gmtime()函數是將日歷時間轉化為世界標准時間(即格林尼治時間),並返回一個tm結構體來保存這個時間,而localtime()函數是將
日歷時間轉化為本地時間。比如現在用gmtime()函數獲得的世界標准時間是2005年7月30日7點18分20秒,那麼用localtime()函數
在中國地區獲得的本地時間會比世界標准時間晚8個小時,即2005年7月30日15點18分20秒。
3. C語言中用difftime計算兩個時間差問題,求解!
你好。
問題分析:
time_t 只能表示從1970年1月1日0時0分0秒 到此時的秒數,1970年1月1日0時0分0秒 以前的時間它是無法表示的。而struct tm 的成員變數tm_year 的值為實際年份減去 1900,你的程序中給timeptr1.tm_year 和timeptr2.tm_year 都賦值為 0,就相當於這兩個時間都是 1900 年,1900 年在 1970年1月1日0時0分0秒 以前,所以用 mktime 函數計算的結果 time_t 是無法表示的,t1 和 t2 的結果就都是 0,最終 difftime(0,0) 結果當然也是 0。
解決方案:
給struct tm 的成員變數tm_year 一個大於 70 的值如 71,即 1971年,總之保證這個時間在 1970年1月1日0時0分0秒 之後即可。
程序清單:
#include "stdio.h"
#include "time.h"
int main()
{
time_t t1,t2;
struct tm timeptr1,timeptr2;
timeptr1.tm_mday=1;
timeptr1.tm_mon=1;
timeptr1.tm_year=1971-1900;
timeptr1.tm_sec=timeptr1.tm_min=timeptr1.tm_hour=
timeptr1.tm_wday=timeptr1.tm_yday=timeptr1.tm_isdst=0;
timeptr2.tm_mday=2;
timeptr2.tm_mon=1;
timeptr2.tm_sec=5;
timeptr2.tm_year=1971-1900;
timeptr2.tm_min=timeptr2.tm_hour=timeptr2.tm_wday=
timeptr2.tm_yday=timeptr2.tm_isdst=0;
t1=mktime(&timeptr1);
t2=mktime(&timeptr2);
printf("時間差: >> %lf ",difftime(t2,t1));
system("pause");
return 0;
}
運行結果:
望採納!
4. C語言時間間隔
double difftime(
time_t timer1,
time_t timer0
);
double _difftime32(
__time32_t timer1,
__time32_t timer0
);
double _difftime64(
__time64_t timer1,
__time64_t timer0
);
參數
timer1
關閉時。
timer0
啟動時間。
返回值
difftime 返回經過的時間 (以秒為單位),從 timer0 到 timer1。 返回的值是一個雙精度浮點數。 返回值可能為 0,指示錯誤。
備注
difftime 函數計算兩個提供的時間值 timer0 和 timer1之間的差異。
5. c語言如何計時
C語言中提供了許多庫函數來實現計時功能
下面介紹一些常用的計時函數
1. time()
頭文件:time.h
函數原型:time_t time(time_t * timer)
功能:返回以格林尼治時間(GMT)為標准,從1970年1月1日00:00:00到現在的時此刻所經過的秒數
用time()函數結合其他函數(如:localtime、gmtime、asctime、ctime)可以獲得當前系統時間或是標准時間。
用difftime函數可以計算兩個time_t類型的時間的差值,可以用於計時。用difftime(t2,t1)要比t2-t1更准確,因為C標准中並沒有規定time_t的單位一定是秒,而difftime會根據機器進行轉換,更可靠。
說明:C標准庫中的函數,可移植性最好,性能也很穩定,但精度太低,只能精確到秒,對於一般的事件計時還算夠用,而對運算時間的計時就明顯不夠用了。
2. clock()
頭文件:time.h
函數原型:clock_t clock(void);
功能:該函數返回值是硬體滴答數,要換算成秒,需要除以CLK_TCK或者 CLK_TCKCLOCKS_PER_SEC。比如,在VC++6.0下,這兩個量的值都是1000。
說明:可以精確到毫秒,適合一般場合的使用。
3. timeGetTime()
頭文件:Mmsystem.h引用庫: Winmm.lib
函數原型:DWORD timeGetTime(VOID);
功能:返回系統時間,以毫秒為單位。系統時間是從系統啟動到調用函數時所經過的毫秒數。注意,這個值是32位的,會在0到2^32之間循環,約49.71天。
說明:該函數的時間精度是五毫秒或更大一些,這取決於機器的性能。可用timeBeginPeriod和timeEndPeriod函數提高timeGetTime函數的精度。如果使用了,連續調用timeGetTime函數,一系列返回值的差異由timeBeginPeriod和timeEndPeriod決定。
4. GetTickCount()
頭文件:windows.h
函數原型:DWORD WINAPI GetTickCount(void);
功能:返回自設備啟動後的毫秒數(不含系統暫停時間)。
說明:精確到毫秒。對於一般的實時控制,使用GetTickCount()函數就可以滿足精度要求。
5. QueryPerformanceCounter()、QueryPerformanceFrequency()
頭文件:windows.h
函數原型:BOOLQueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount);
BOOLQueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
功能:前者獲得的是CPU從開機以來執行的時鍾周期數。後者用於獲得你的機器一秒鍾執行多少次,就是你的時鍾周期。
補充:LARGE_INTEGER既可以是一個8位元組長的整型數,也可以是兩個4位元組長的整型數的聯合結構, 其具體用法根據編譯器是否支持64位而定:
在進行定時之前,先調用QueryPerformanceFrequency()函數獲得機器內部定時器的時鍾頻率,然後在需要嚴格定時的事件發生之前和發生之後分別調用QueryPerformanceCounter()函數,利用兩次獲得的計數之差及時鍾頻率,計算出事件經歷的精確時間。
說明:這種方法的定時誤差不超過1微秒,精度與CPU等機器配置有關,一般認為精度為透微秒級。在Windows平台下進行高精度計時的時候可以考慮這種方法。
6. gettimeofday()
Linux C函數。
頭文件:sys/time.h
函數原型:int gettimeofday(struct timeval *tv,struct timezone *tz);
說明:其參數tv是保存獲取時間結果的結構體,參數tz用於保存時區結果(若不使用則傳入NULL即可)。
timeval的定義為:
structtimeval{
longtv_sec;//秒數
longtv_usec;//微秒數
}
可見該函數可用於在linux中獲得微秒精度的時間。
說明:使用這種方式計時,精度可達微秒。經驗證,在arm+linux的環境下此函數仍可使用。
6. c語言計算時間差
#include <time.h>
time_t start_time, end_time;
double elapsed_time;
time( &start_time );
... ...
time( &end_time );
elapsed_time = difftime(start_time, end_time);
7. 想要c語言時間函數:clock得到處理器時間 difftime得到時間差 mktime 設置時間 time得到時間的描述和例子
time_t其實就是一個long類型,可以查看time.h頭文件,指從1900年1月1日開始到現在的秒數
8. c語言如何計算兩個時間相差多少
任意輸入兩個24小時制的時間,輸出兩個時間的時間差;
9. c語言difftime返回0
difftime類型是double,所以輸出格式應該用%f,而不是%d
10. C語言 計時函數時間差總為零
C語言中變數是有作用域的,除非定義了全局變數,一般而言不同的函數體中的變數相互不可見。
因此,主函數中的t_start與leave_car()函數中的t_start並不是同一個變數!
修改如下:
將主函數中的
time_t t_start,t_end;
t_start=time(NULL);
兩個語句去掉,因為對整個程序而言沒有實際的作用。在leave_car()中
printf("yes");
前添加
t_start=time(NULL);
另外
printf("time is %f s ",difftime(t_end,t_start);
少寫了一個反括弧