《linux 下的時間獲取函式》
一. linux時間漫談
linux內部對時間是用從Epoch時間開始計時的秒數來表示的。Epoch也就是通用協調時間(UTC,也就是格林尼治平均時間或格林威治標準時間,CMT)。linux將這個資料儲存在time_t結構體變數裡,目前的32為系統最多支撐到2038年,64位系統就還早著呢。
談到時間,不得不講一下時區的問題。以格林尼治所在地區為標準,向東向西各劃分出12個時區,每個時區之間經度相差15度,時間相差1小時。例如,北京在東八區,以東經120度(15*8)為中軸(範圍在112.5~127.5度),東八區的時間比格林尼治地區時間早8小時。也就是說,如果linux以格林尼治地區1970年01月01日0點開始計時,處在東八區的北京則實際上是以1970年01月01日早上8點開始計時。
不信你試試下面兩個命令,看看輸出什麼:
[[email protected] ~]# date --date="19700101 00:00:00" +%s -28800 [[email protected] ~]# date --date="19700101 08:00:00" +%s 0
二. linux時間的獲取和轉換。
-----------------------------------------------------------------------------------------------------------------------------------
| 系統呼叫 | 庫函式
-----------------------------------------------------------------------------------------------------------------------------------
讀取時間 | gettimeofday,time | ftime,
-----------------------------------------------------------------------------------------------------------------------------------
格式轉換 | | ctime,localtime,asctime,strftime,gmtime;mktime,
-----------------------------------------------------------------------------------------------------------------------------------
設定時間 | settimeofday,stime |
-----------------------------------------------------------------------------------------------------------------------------------
1. 獲取基本時間資訊
- time函式返回從Epoch(1970年1月1日00:00:00 UTC)開始所經過的秒數。
- localtime /gmtime函式分別獲取年月日時分秒的數值(localtime是轉換成本地時間,gmtime是轉換成格林尼治時間)。
- asctime/ctime函式把時間轉換成字串(ctime函式直接將time函式返回的time_t型別時間轉換成字串)。
#include <time.h>
time_t time(time_t *t);
struct tm *localtime(const time_t *timep);
struct tm *gmtime(const time_t *timep);
char *asctime(const struct tm *tm);
例如:
[[email protected] multi_job_submit]# cat get_cur_time.c
#include <stdio.h>
#include <time.h>
int main()
{
time_t cur_t;
struct tm* cur_tm;
time(&cur_t);
cur_tm=localtime(&cur_t);
printf("Current time is: %s",asctime(cur_tm));
cur_tm=gmtime(&cur_t);
printf("Current time is: %s",asctime(cur_tm));
printf("Current time is: %s",ctime(&cur_t));
return 0;
}
執行結果:
[[email protected] multi_job_submit]# ./get_cur_time
Current time is: Sun Aug 3 17:32:28 2014
Current time is: Sun Aug 3 09:32:28 2014
Current time is: Sun Aug 3 17:32:28 2014
2. 獲取精確時間
- gettimeofday獲取精確到微秒的系統時間,結構體型別為struct timeval。
- struct timeval型別中的元素tv_sec等價於time函式獲取的系統時間,可進一步利用localtime/gmtime函式和asctime函式轉換格式。
#include <sys/time.h>
int gettimeofday(struct timeval *tv, struct timezone *tz);
int settimeofday(const struct timeval *tv , const struct timezone *tz);
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
struct timezone {
int tz_minuteswest; /* minutes west of Greenwich */
int tz_dsttime; /* type of DST correction */
};
PS:使用函式gettimeofday/settimeofday的時候通常第二個引數設定為NULL。
例如:
[[email protected] multi_job_submit]# cat get_cur_utime.c
#include <time.h>
#include <sys/time.h>
int main()
{
struct timeval cur_t;
struct tm* cur_tm;
gettimeofday(&cur_t,NULL);
cur_tm=localtime(&cur_t.tv_sec);
printf("Current time is: %sMicro seconds is: %d.\n",asctime(cur_tm),cur_t.tv_usec);
return 0;
}
輸出結果:
[[email protected] multi_job_submit]# ./get_cur_utime
Current time is: Sun Aug 3 17:35:09 2014
Micro seconds is: 93337.
相關推薦
《linux 下的時間獲取函式》
一. linux時間漫談 linux內部對時間是用從Epoch時間開始計時的秒數來表示的。Epoch也就是通用協調時間(UTC,也就是格林尼治平均時間或格林威治標準時間,CMT)。linux將這個資料儲存在time_t結構體變數裡,目前的32為系統最多支撐到
linux下時間函式
void get_local_time(long sec, char *plocaltime, int len) { struct tm t1 = {0}; localtime_r(&sec, &t1); snprintf(plocaltime, len, "%04d-%02
linux下C獲取系統時間的方法
asctime(將時間和日期以字串格式表示) 相關函式 time,ctime,gmtime,localtime 表頭檔案 #include<time.h> 定義函式 char * asctime(const struct tm * ti
Linux下利用ioctl函式獲取網絡卡資訊
linux下的ioctl函式原型如下: #include <sys/ioctl.h> int ioctl(int handle, int cmd, [int *argc, int argv]) 函式成功返回0,失敗返回-1. 其相關命令介面如下:
Linux下時間函式:struct timeval結構體
Date: 2017/4/28 Linux時間函式的結構體如下: #include "sys/time.h" struct timeval { __time_t tv_sec;
Linux 下c獲取當前時間(精確到秒和毫秒或者微秒)
獲取當前的時間的秒數和微秒數本方法需要用到gettimeofday()函式,該函式需要引入的標頭檔案是sys/time.h 。 函式說明int gettimeofday (struct timeval * tv, struct timezone * tz)
linux下統計程式/函式執行時間
如果只是初步統計或比較各函式的執行時間,可以用以下方法,若是想詳細統計專案中各個函式時間,建議使用第三方工具 一. 使用time 命令 例如編譯一個hello.c檔案 #gcc hel
linux下C獲取文件的大小
錯誤代碼 返回 system sys string 文件系統 識別碼 連接 chm 獲取文件大小這裏有兩種方法: 方法一、 範例: unsigned long get_file_size(const char *path) { unsigned lo
Linux下程式設計獲取本地IP地址的常見方法
轉載於:http://blog.csdn.net/k346k346/article/details/48231933 在進行linux網路程式設計時,經常用到本機IP地址。本文羅列一下常見方法,以備不時之需。 獲取本機IP地址,是一個相當靈活的操作,原因是網路地址的設定非常靈活而且都是允
Linux下java獲取CPU、記憶體、磁碟IO、網路頻寬使用率
原文地址:https://www.cnblogs.com/gisblogs/p/3985393.html 一、CPU 使用proc檔案系統,"proc檔案系統是一個偽檔案系統,它只存在記憶體當中,而不佔用外存空間。它以檔案系統的方式為訪問系統核心資料的操作提供介面。使用者和應用程式可以通過p
Linux下clock gettime函式詳解
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Linux下原子操作函式
Linux 下gcc內建的原子操作函式 標頭檔案 #include<asm/atomic.h> 編譯時需要加上-march= cpu-type(可以設定為native 讓系統自動去檢測) //先獲取值再操作 type __sync_fetch_an
linux 下檔案同步函式(fflush、sync、fsync、fdatasync)之間差異
遇到機器異常關機時,寫log檔案資訊丟失問題,所以記錄下。 Linux實現中在核心設有緩衝區快取記憶體或頁面快取記憶體,大多數磁碟I/O都通過緩衝區進行。當我們向檔案寫資料時,核心通常先將資料複製到一個緩衝區中,如果該緩衝區尚未寫滿,則並不將其排入輸出佇列,而是等待寫滿或者核心需要重用該
(筆記)Linux下的ioctl()函式詳解
我這裡說的ioctl函式是指驅動程式裡的,因為我不知道還有沒有別的場合用到了它,所以就規定了我們討論的範圍。寫這篇文章是因為我前一陣子被ioctl給搞混了,這幾天才弄明白它,於是在這裡清理一下頭腦。 一、 什麼是ioctl ioctl是裝置驅動程
Linux下mount/umount函式應用
針對海思平臺system命令佔用資源較大的問題,因此程式中與系統呼叫相關的就只能用函式實現了。 demo mount.c: #include <sys/mount.h> int main
Linux下的umask函式
umask函式為程序設定檔案模式建立遮蔽字,並返回以前的值。函式原型為: #include <sys/stat.h> mode_t umask(mode_t cmask); cmask是由下表列出的9個常量中的若干個按位“或”構成的 S_IRUSR
ftp使用1——Linux下wget獲取ftp下目錄下檔案
如果某個目錄下有一個檔案可以使用ftp命令: get xxx 如果是某個目錄下有多個檔案(且不需要獲取目錄下子資料夾下的內容): mget * 如果是某個目錄下有子目錄希望獲取所有子目錄: wget -nH -m --ftp-user=myusername--f
Linux下curses常用函式
一.全域性變數 WINDDW* curscr:當前螢幕 WINDOW* stdscr:標準螢幕 int LINES:終端上的行數 int COLS:終端上的列數 bool TRUE:真標誌,1 bool FALS
linux下的靜態函式庫和動態函式庫
linux下的靜態庫和動態庫 最近在做Linux下應用程式的移植,用到了靜態庫和動態庫概念,從網上搜集了一些資料,並做了簡單整理,轉帖如下: 一、 簡單介紹 inux中有兩類
linux下snmp4j獲取net-snmp的基本資訊
linux下,net-snmp已經提供了完整的snmp服務和框架,尤其是基本的snmp資訊,如sysObjectId、CPU、記憶體等。通過標準的snmp的oid,可以很容易的從net-snmp所提供的服務中獲取這些資訊。但net-snmp的trap功能需要通過指令碼來配置