Linux下關於時間概念的C語言程式設計
Abstract
在程式中,經常需要輸出系統的當前時間、計算程式的執行時間、使用計時器等。
Introduction
一、時間的型別
1.格林威治標準時間
coordinated universal time(UTC)是世界標準時間,即常說的格林威治標準時間(greenwich mean time,GMT).
2.日曆時間
日曆時間(calendar time)是用"一個標準時間點(如1970年1月1日0點)到此時經過的秒數"來表示的時間.
二、時間函式的API
時間函式的API均屬於系統呼叫函式.。
1.獲取日曆時間
#include <time.h>
time_t time(time_t *tloc)
函式功能:獲取日曆時間,即從1970年1月1日0點到現在所經歷的秒數.
引數:通常設定為NULL
(time_t在time.h中定義:typedef long int time_t)
例:
#include <time.h>
void main()
{
int seconds=0;
seconds = time(NULL);
printf("seconds=%d\n",seconds);
}
執行結果:
[root@localhost Time]# ./time
seconds=1294908511
通常使用者得到日曆時間的秒數沒有實際的意義,但可以為時間轉化做一些鋪墊性質的工作.為了更好的利用時間,用
戶需要將這些秒數轉化為更容易接受的時間表示方式,這些表示時間的方式有格林威治時間、本地時間等.
2.將日曆時間轉換為格林威治標準時間
struct tm *gmtime(const time_t *timep)
函式功能:將日曆時間轉化為格林威治標準時間,並儲存在tm結構
引數:日曆時間的返回值
3.將日曆時間轉化為本地時間
struct tm* localtime(const time_t *timep)
函式功能:將日曆時間轉化為本地時間,並儲存至tm結構
引數:日曆時間的返回值
由上面兩個函式可以看出,這兩個函式的返回值均存放在tm結構中,具體的tm結構如下:
struct tm
{
int tm_sec; //秒值
int tm_min; //分鐘值
int tm_hour; //小時值
int tm_mday; //本月第幾日
int tm_mon; //本年第幾月
int tm_year; //tm_year+1900=哪一年
int tm_wday; //本週第幾日
int tm_yday; //本年第幾日
int tm_isdst; //日光節約時間
}
建立time1.c
#include <stdio.h>
#include <time.h>
int main(void)
{
struct tm *local;
time_t t;
t = time(null); //獲取日曆時間
local = localtime(&t); //將日曆時間轉化為本地時間,並儲存在struct tm結構中
printf("local hour is :%d\n",local->tm_hour);
local = gmtime(&t); //將日曆時間轉化為格林威治時間,並儲存在struct tm結構中
printf("utc hour is :%d\n",local->tm_hour);
return 0;
}
執行結果:
[root@localhost Time]# gcc time1.c -o time1
[root@localhost Time]# ./time1
Local hour is: 0
UTC hour is: 8
[root@localhost Time]# date
Thu Jan 13 00:52:44 PST 2011
利用函式gmtime()、localtime()可以將日曆時間轉化為格林威治時間和本地時間,雖然使用者可通過結構體tm來獲取
這些時間值,但看起來還不方便,最好是將所有的資訊,如年、月、日、星期、時、分、秒以字串的形式顯示出來,
這樣就加直觀.
4.時間顯示
char *asctime(const struct tm *tm)
函式功能:將tm格式的時間轉化為字串
引數:日曆時間的返回值
例如: SAT Jul 30 08:43:03 2005
該函式較ctime()使用起來更加的複雜.必須按照下面3個步驟來進行.
<1>使用函式time()來獲取日曆時間
<2>使用函式gmtime()將日曆時間轉化為格林威治標準時間
<3>使用函式asctime()將tm格式的時間轉化為字串
例程:
#include <time.h>
#include <stdio.h>
int main(void)
{
struct tm *ptr;
time_t lt;
lt=time(null); /*獲取日曆時間*/
ptr=gmtime(<); /*轉化為格林威治時間*/
printf(asctime(ptr)); /*以格林威治時間的字串方式列印*/
printf(ctime(<)); /*以本地時間的字串方式列印*/
return 0;
}
char *ctime(const time_t *timep)
函式功能:將日曆時間轉化為本地時間的字串形式
引數:日曆時間的返回值
該函式較asctime()使用起來更加簡單.必須按照下面2個步驟來進行.
<1>使用函式time()來獲取日曆時間
<2>使用函式ctime()將日曆時間直接轉化為字串
5.獲取從今日凌晨到現在的時間差
int gettimeofday(struct timeval *tv,struct timezone *tz)
函式功能:獲取從今日凌晨(0:0:0)到現在的時間差,常用於計算事件耗時
引數1:存放從今日凌晨(0:0:0)到現在的時間差,時間差以秒或微秒為單位,以結構體形式存放
struct timeval
{
int tv_sec; //秒數
int tv_usec; //微秒數
}
引數2:常設定為null
函式用法:可以在做某件事情之前呼叫gettimeofday(),在做完該件事情之後呼叫gettimeofday(),兩個函式的引數1
的差就是做該事情所消耗的時間.
例程:計算函式function()的耗時
time.c
#include <sys/time.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void function() /* 演算法分析 */
{
unsigned int i,j;
double y;
for(i=0;i<1000;i++)
for(j=0;j<1000;j++)
y++;
}
void main()
{
struct timeval tpstart,tpend;
float timeuse;
gettimeofday(&tpstart,null); // 開始時間
function();
gettimeofday(&tpend,null); // 結束時間
/* 計算執行時間,以微秒為單位進行計算 */
timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+tpend.tv_usec-tpstart.tv_usec;
timeuse/=1000000;
printf("used time:%f\n",timeuse);
exit(0);
}
執行結果:
[root@localhost lishuai]# gcc time.c -o time -wall
[root@localhost lishuai]# ./time
use time:0.006288
6.延時函式
<1>使程式睡眠seconds秒
unsigned int sleep(unsigned int seconds)
函式功能:使程式睡眠seconds秒
引數:需要休眠的秒數
<2>使程式睡眠usec微秒
void usleep(unsigned long usec)
函式功能:使程式睡眠usec微秒
引數:需要休眠的秒數
相關文章
- Linux下C語言程式設計(轉)LinuxC語言程式設計
- 關於C語言的圖形程式設計薦C語言程式設計
- 一個關於pynoi遊戲的C語言程式設計遊戲C語言程式設計
- Linux下C語言程式設計簡介(轉)LinuxC語言程式設計
- 程式設計師相信的關於時間方面的謊言程式設計師
- Linux下C語言程式設計基礎知識LinuxC語言程式設計
- Linux下C語言程式設計基礎知識(轉)LinuxC語言程式設計
- C語言程式設計C語言程式設計
- 關於函數語言程式設計的思考(1)函數程式設計
- 關於函數語言程式設計的思考(2)函數程式設計
- C語言高效程式設計的四大祕技之以空間換時間C語言程式設計
- 函數語言程式設計的幾個概念函數程式設計
- C語言程式設計原理C語言程式設計
- c語言程式設計題C語言程式設計
- 關於C語言的常量C語言
- MySQL的C語言程式設計(一)MySqlC語言程式設計
- 關於 Angular 程式設計中的 shim 概念Angular程式設計
- 奇怪的C語言——C51程式設計C語言注意事項C語言程式設計
- C語言時間函式C語言函式
- linux作業系統下c語言程式設計入門(1)(轉)Linux作業系統C語言程式設計
- linux作業系統下c語言程式設計入門(2)(轉)Linux作業系統C語言程式設計
- C語言MySQL程式設計示例C語言MySql程式設計
- C 語言程式設計(unix) (轉)程式設計
- 結對程式設計(c語言)程式設計C語言
- Linux下C語言驗證多程式LinuxC語言
- Linux Socket C語言網路程式設計:TCP SocketLinuxC語言程式設計TCP
- Linux Socket C語言網路程式設計:UDP SocketLinuxC語言程式設計UDP
- C++的函數語言程式設計C++函數程式設計
- perl語言程式設計 下載程式設計
- C#並行程式設計-相關概念C#並行行程程式設計
- 關於大數(C語言)C語言
- C 語言程式設計利器之 CLion程式設計
- C#函數語言程式設計C#函數程式設計
- C語言程式設計基本規範C語言程式設計
- Linux Socket C語言網路程式設計:Select SocketLinuxC語言程式設計
- React前奏,函數語言程式設計基本概念React函數程式設計
- 關於C語言的位運算子C語言
- 關於C語言的面試問題C語言面試