1. 程式人生 > >Linux C 獲取格式化的日期時間

Linux C 獲取格式化的日期時間

概述

世界標準時間(Coordinated Universal TimeUTC),也就是大家所熟知的格林威治標準時間(Greenwich Mean TimeGMT)。世界各地時間也世界標準時間為基準劃分為不同的時區,例如,中國的北京時間與UTC的時差為+8,也就是UTC+8。美國是UTC-5 Calendar Time:日曆時間,是用從一個標準時間點到此時的時間經過的秒數來表示的時間。無論哪一個時區,在同一時刻對同一個標準時間點來說,日曆時間都是一樣的。日曆時間返回自1970-1-1:00:00:00以來所經過的秒數累計值。 跟日期時間相關的shell命令 $ date                    // 顯示當前日期
$ time                   // 顯示程式執行的時間 $ hwclock             // 顯示與設定硬體時鐘 $ clock                  // 顯示與設定硬體時鐘,是hwclock的連結檔案 $ cal                      // 顯示日曆 1date 顯示或設定當前日期時間 $ date             顯示當前日期時間 -- 中國北京時間 CST China Standard Time UTC+8:00 2008 05 01 星期四 04:28:27 CST $ date –u        顯示當前日期時間 -- 世界標準時間
 UTC 2008 04 30 星期三 20:29:23 UTC 以上兩個時間相比有8個小時的時差 $ date –R        顯示當前日期時間 – RFC格式 Thu, 01 May 2008 04:30:25 +0800 $ date -s 20080501        設定日期 $ date -s 20:40:30          設定時間 2time 顯示程式執行時消耗的實際時間,使用者CPU時間和系統CPU時間。 $ time a.out                  可執行程式a.out real    0m10.081s              程式開始執行到結束的時間 user    0m0.000s        使用者
CPU時間, sys     0m0.004s        系統CPU時間 使用者CPU時間等於times函式返回的struct tms中的tms_utime  tms_cutime和。 系統CPU時間等於times函式返回的struct tms中的tms_stime  tms_cstime和。 3hwclock       顯示與設定硬體時鐘 Linux中有硬體時鐘與系統時鐘等兩種時鐘。硬體時鐘是指主機板上的時鐘裝置,也就是通常可在BIOS畫面設定的時鐘。系統時鐘則是指 kernel中的時鐘。當Linux啟動時系統時鐘會去讀取硬體時鐘的設定,之後系統時鐘即獨立運作。所有Linux相關指令與函式都是讀取系統時鐘的設定。 # hwclock –show          顯示硬體時鐘的時間與日期 # hwclock –hctosys             將硬體時鐘調整為與目前的系統時鐘一致 # hwclock –systohc             將硬體時鐘調整為與目前的系統時鐘一致 # hwclock --set --date="20080430 21:30:30"              設定硬體時鐘 # hwclock                    hwclock –show Clock 命名是hwclock的連結檔案 $ ls -al /sbin/clock lrwxrwxrwx 1 root root 7 03-08 23:59 /sbin/clock -> hwclock 4)顯示日曆 $ cal                            顯示本年本月的日曆 $ cal month year    顯示指定年月的日曆: cal 4 2008

1.2 跟日期時間有關的資料結構

1.2.1 clock_t 結構

程式開始執行到此時所經過的CPU時鐘計時單元數用clock資料型別表示。 typedef long clock_t; #define CLOCKS_PER_SEC ((clock_t)1000)      // 每個時鐘單元是1毫秒

1.2.2 time_t 結構

日曆時間(Calendar Time)是通過time_t資料型別來表示的,用time_t表示的時間(日曆時間)是從一個時間點(197011000)到此時的秒數。 typedef long time_t;                     // 時間值

1.2.3 tm結構

通過tm結構來獲得日期和時間 struct tm {         int tm_sec;           /*  – 取值區間為[0,59] */         int tm_min;           /*  - 取值區間為[0,59] */         int tm_hour;          /*  - 取值區間為[0,23] */         int tm_mday;        /* 一個月中的日期 - 取值區間為[1,31] */         int tm_mon;          /* 月份(從一月開始,0代表一月) - 取值區間為[0,11] */         int tm_year;          /* 年份,其值等於實際年份減去1900 */         int tm_wday;        /* 星期 – 取值區間為[0,6],其中0代表星期天,1代表星期一 */         int tm_yday;         /* 從每年11日開始的天數– 取值區間[0,365],其中0代表11 */         int tm_isdst;   /* 夏令時識別符號,夏令時tm_isdst為正;不實行夏令時tm_isdst0*/ };

1.2.4 tms結構

儲存著一個程序及其子程序使用的CPU時間 struct tms{        clock_t tms_utime;        clock_t tms_stime;        clock_t tms_cutime;        clock_t tms_cstime; }

1.2.5 Utimbuf結構

struct utimbuf{        time_t     actime;           // 存取時間        time_t     modtime;        // 修改時間 } 檔案的時間 st_atime         檔案資料的最後存取時間 st_mtime        檔案資料的最後修改時間 st_ctime         檔案資料的建立時間

1.2.5 timeval結構

struct timeval
{
    time_t tv_sec;
    susecond_t tv_usec; //當前妙內的微妙數
};

1.2.6 timer_struct結構

struct timer_struct { 

    unsigned long expires; //定時器被啟用的時刻

    void (*fn)(void); //定時器啟用後的處理函式 }

 

1.3 跟日期時間相關的函式

1.3.1 clock函式

#include <time.h> clock_t clock(void);                    返回從程式開始執行到程式中呼叫clock()函式之間的CPU時鐘計時單元數  1:clock函式的例子 $ vi clock.c #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) {     long    loop = 10000000L;     double duration;     clock_t start, end;     printf("Time to do %ld empty loops is ", loop);     start = clock();     while(loop--)   ;     end = clock();    duration = (double)(end-start)/CLOCKS_PER_SEC;     printf("%f seconds\n", duration);     return(0); } 編譯、執行: $ gcc clock.c -o clock $ ./clock Time to do 10000000 empty loops is 0.220000 seconds

1.3.2 time函式

日曆時間  #include <time.h> time_t time(time_t *calptr)        返回自1970-1-1:00:00:00以來經過的秒數累計值  2:time函式的例子 #include <stdio.h> #include <time.h> int main(void) {     time_t now;     time(&now);     printf("now time is %d\n", now);     return(0); } 編譯、執行: $ gcc time.c -o time $ ./time now time is 1193688148

1.3.3 times函式

程式執行的時間 #include <sys/times.h> clock_t times(struct tms *buf);    返回自系統自舉後經過的時鐘滴答數  3:times函式的例子 #include <stdio.h> #include <sys/times.h> int main(void) {     int i;     clock_t start, end;     struct tms tms_start, tms_end;     start = times(&tms_start);     end = times(&tms_end);     printf("start clock time : %d\n", start);     printf("end   clock time : %d\n", end);     return(0); } 編譯、執行: $ gcc times.c -o times $ ./times Start clock time : 1720654909 End clock time : 1720654909

1.3.4 localtime函式

將日曆時間變換成本地時間,考慮到本地時區和夏令時標誌。 #include <time.h> struct tm *localtime(const time_t * calptr);  4:localtime函式的例子 #include <stdio.h> #include <time.h> int main(void) {     time_t now;     struct tm *tm_now;     time(&now);     tm_now = localtime(&now);     printf("now datetime: %d-%d-%d %d:%d:%d\n", tm_now->tm_year, tm_now->tm_mon, tm_now->tm_mday, tm_now->tm_hour, tm_now->tm_min, tm_now->tm_sec);     return(0); } 編譯、執行: $ gcc localtime.c -o localtime $ ./localtime now datetime: 107-9-30 5:11:43

1.3.5 gmtime函式

將日曆時間變換成國際標準時間的年月日分秒 #include <time.h> struct tm *gmtime(const time_t *calptr);  5:gmtime函式的例子 #include <stdio.h> #include <time.h> int main(void) {     time_t now;     struct tm *tm_now;     time(&now);     tm_now = gmtime(&now);     printf("now datetime: %d-%d-%d %d:%d:%d\n", tm_now->tm_year, tm_now->tm_mon, tm_now->tm_mday, tm_now->tm_hour, tm_now->tm_min, tm_now->tm_sec);     return(0); } 編譯、執行: $ gcc gmtime.c -o gmtime $ ./gmtime now datetime: 107-9-29 21:15:26

1.3.6 mktime函式

以本地時間的年月日為引數,將其變換成time_t #include <time.h> time_t mktime(struct tm *tmptr);  6:mktime函式的例子 #include <stdio.h> #include <time.h> int main(void) {     time_t now, new_time;     struct tm *tm_now;     time(&now);     printf("now time is %ld\n", now);     tm_now = localtime(&now);     new_time = mktime(tm_now);     printf("new time is %ld\n", new_time);     return(0); } 編譯、執行: $ gcc mktime.c -o mktime $ ./mktime now time is 1193692806 new time is 1193692806

1.3.7 asctime函式

產生形式的26位元組字串,引數指向年月日等字串的指標。與date命令輸出形式類似 #include <time.h> char *asctime(const struct tm *tmptr);  7:astime函式的例子 #include <stdio.h> #include <time.h> int main(void) {     time_t now;     struct tm *tm_now;     char *datetime;     time(&now);     tm_now = localtime(&now);     datetime = asctime(tm_now);     printf("now datetime: %s\n", datetime);     return(0); } 編譯、執行: $ gcc asctime.c -o asctime $ ./asctime now datetime: Tue Oct 30 05:22:21 2007

1.3.8 ctime函式

產生形式的26位元組字串,引數指向日曆時間的指標。 #include <time.h> char *ctime(const time_t *calptr);  8:ctime函式的例子 #include <stdio.h> #include <time.h> int main(void) {     time_t now;     char *datetime;     time(&now);     datetime = ctime(&now);     printf("now datetime: %s\n", datetime);     return(0); } 編譯、執行: $ gcc ctime.c -o ctime $ ./ctime now datetime: Tue Oct 30 05:23:45 2007

1.3.9 strftime函式

格式化時間輸出 #include <time.h> size_t strftime(char *buf,size_t maxsize,const char *format,const struct tm *tmptr); %a 星期幾的簡寫  %A 星期幾的全稱  %b 月分的簡寫  %B 月份的全稱  %c 標準的日期的時間串  %C 年份的後兩位數字  %d 十進位制表示的每月的第幾天  %D //  %e 在兩字元域中,十進位制表示的每月的第幾天  %F --  %g 年份的後兩位數字,使用基於周的年  %G 年分,使用基於周的年  %h 簡寫的月份名  %H 24小時制的小時  %I 12小時制的小時  %j 十進位制表示的每年的第幾天  %m 十進位制表示的月份  %M 十時製表示的分鐘數  %n 新行符  %p 本地的AMPM的等價顯示  %r 12小時的時間  %R 顯示小時和分鐘:hh:mm  %S 十進位制的秒數  %t 水平製表符  %T 顯示時分秒:hh:mm:ss  %u 每週的第幾天,星期一為第一天 (值從06,星期一為0  %U 第年的第幾周,把星期日做為第一天(值從053  %V 每年的第幾周,使用基於周的年  %w 十進位制表示的星期幾(值從06,星期天為0  %x 標準的日期串  %X 標準的時間串  %y 不帶世紀的十進位制年份(值從099  %Y 帶世紀部分的十進位制年份  %z%Z 時區名稱,如果不能得到時區名稱則返回空字元。  %% 百分號   9:strftime函式的例子 #include <stdio.h> #include <time.h> int main(void) {     time_t now;     struct tm *tm_now;     char    datetime[200];     time(&now);     tm_now = localtime(&now);     strftime(datetime, 200, "%x %X %n%Y-%m-%d %H:%M:%S %nzone: %Z\n", tm_now);     printf("now datetime : %s\n", datetime);     return(0); } 編譯、執行: $ gcc strftime.c -o strftime ]$ ./strftime now datetime : 10/30/07 05:41:47 2007-10-30 05:41:47 zone: CST

1.3.10 utime函式

更改檔案的存取和修改時間 #include <time.h> int utime(const char pathname, const struct utimbuf *times)       返回值:成功返回0,失敗返回-1 times 為空指標,存取和修改時間設定為當前時間  10utime函式的例子 #include <stdio.h> #include <time.h> int main(int argc, char *argv[]) {        if(argc < 2){               fprintf(stderr, "Error: usging command file_path");               exit(1);        }        utime(argv[1], NULL);        return(0); } 編譯、執行: $ touch file1 $ ls -al file1            // 先建立一個檔案file1,檢視一下他的建立時間 -rw-r--r-- 1 hongdy hongdy 3431 05-01 05:59 file1 $ gcc utime.c –o utime $ ./utime file1         $ ls -al file1 -rw-r--r-- 1 hongdy hongdy 3431 05-01 06:00 file1

1.3.11 gettimeofday函式

取得目前的時間

#include <time.h> int gettimeofday ( struct& nbsptimeval * tv , struct timezone * tz ) 函式說明  gettimeofday()會把目前的時間有tv所指的結構返回,當地時區的資訊則放到tz所指的結構中。
timeval結構定義為:
struct timeval{
long tv_sec; /*秒*/
long tv_usec; /*微秒*/
};
timezone 結構定義為:
struct timezone{
int tz_minuteswest; /*和Greenwich 時間差了多少分鐘*/
int tz_dsttime; /*日光節約時間的狀態*/
};
上述兩個結構都定義在/usr/include/sys/time.h。tz_dsttime 所代表的狀態如下
DST_NONE /*不使用*/
DST_USA /*美國*/
DST_AUST /*澳洲*/
DST_WET /*西歐*/
DST_MET /*中歐*/
DST_EET /*東歐*/
DST_CAN /*加拿大*/
DST_GB /*大不列顛*/
DST_RUM /*羅馬尼亞*/
DST_TUR /*土耳其*/
DST_AUSTALT /*澳洲(1986年以後)*/
 
返回值  成功則返回0,失敗返回-1,錯誤程式碼存於errno。附加說明EFAULT指標tv和tz所指的記憶體空間超出存取許可權。 times 為空指標,存取和修改時間設定為當前時間  10gettimeofday函式的例子 #include<sys/time.h>
#include<unistd.h>
main(){
struct timeval tv;
struct timezone tz;
gettimeofday (&tv , &tz);
printf(“tv_sec; %d\n”, tv,.tv_sec) 
printf(“tv_usec; %d\n”,tv.tv_usec);
printf(“tz_minuteswest; %d\n”, tz.tz_minuteswest);
printf(“tz_dsttime, %d\n”,tz.tz_dsttime);
} 編譯、執行: tv_usec:136996
tz_minuteswest:-540
tz_dsttime:0 tv_sec: 974857339

1.3.12 settimeofday函式

設定目前時間

#include<sys/time.h>
#include<unistd.h>
 
int settimeofday ( const& nbspstruct timeval *tv,const struct timezone *tz);
 
函式說明  settimeofday()會把目前時間設成由tv所指的結構資訊,當地時區資訊則設成tz所指的結構。詳細的說明請參考gettimeofday()。注意,只有root許可權才能使用此函式修改時間。
 
返回值  成功則返回0,失敗返回-1,錯誤程式碼存於errno。
 
錯誤程式碼  EPERM 並非由root許可權呼叫settimeofday(),許可權不夠。
EINVAL 時區或某個資料是不正確的,無法正確設定時間。 times 為空指標,存取和修改時間設定為當前時間  12settimeofday函式的例子 /************************************************
設定作業系統時間
引數:*dt資料格式為"2006-4-20 20:30:30"
呼叫方法:
char *pt="2006-4-20 20:30:30";
SetSystemTime(pt);
**************************************************/
int SetSystemTime(char *dt)
{
struct rtc_time tm;
struct tm _tm;
struct timeval tv;
time_t timep;
sscanf(dt, "%d-%d-%d %d:%d:%d", &tm.tm_year,
&tm.tm_mon, &tm.tm_mday,&tm.tm_hour,
&tm.tm_min, &tm.tm_sec);
_tm.tm_sec = tm.tm_sec;
_tm.tm_min = tm.tm_min;
_tm.tm_hour = tm.tm_hour;
_tm.tm_mday = tm.tm_mday;
_tm.tm_mon = tm.tm_mon - 1;
_tm.tm_year = tm.tm_year - 1900;

timep = mktime(&_tm);
tv.tv_sec = timep;
tv.tv_usec = 0;
if(settimeofday (&tv, (struct timezone *) 0) < 0)
{
printf("Set system datatime error!\n");
return -1;
}
return 0;
}

相關推薦

Linux C 獲取格式化日期時間

概述 世界標準時間(Coordinated Universal Time,UTC),也就是大家所熟知的格林威治標準時間(Greenwich Mean Time,GMT)。世界各地時間也世界標準時間為基準劃分為不同的時區,例如,中國的北京時間與UTC的時差為+8,也就是UTC+8。美國是UTC-5。 Cal

c#獲取當前日期時間以及格式化操作

我們可以通過使用DataTime這個類來獲取當前的時間。通過呼叫類中的各種方法我們可以獲取不同的時間:如:日期(2008-09-04)、時間(12:12:12)、日期+時間(2008-09-04 12:11:10)等。 //獲取日期+時間 DateTime.Now.T

C#獲取當前日期時間(轉)

num minutes ron time() mon 當前日期 sql cond rtti //獲取日期+時間DateTime.Now.ToString(); // 2008-9-4 20:02:10DateTime.Now.ToLocalTime()

C#獲取當前日期時間

local bsp short con sda etime months 調用 tof 我們可以通過使用DataTime這個類來獲取當前的時間。通過調用類中的各種方法我們可以獲取不同的時間:如:日期(2008-09-04)、時間(12:12:12)、日期+時間(2008-0

Linux shell 獲取當前日期/時間

當前日期 [[email protected] DFJR-ERP]# cur_date=”date +%Y-%m-%d” [[email protected] DFJR-E

linux c獲取系統啟動時間

sysinfo 函式原型 int sysinfo(struct sysinfo *info); ##獲取系統相關資訊結構體 sysinfo 結構體說明 struct sysinfo {

ASP.NET C# 獲取當前日期 時間 年 月 日 時 分 秒

//獲取日期+時間 DateTime.Now.ToString();            // 2008-9-4 20:02:10 DateTime.Now.ToLocalTime().ToString();        // 2008-9-4 20:12:12 //獲取日期 DateTime.Now.T

C#獲取網路日期時間

【1】獲取網路日期時間 /// <summary> /// 獲取網路日期時間 /// </summary> /// <returns></returns>

C# 獲取當前日期時間、季度

當前日期 starty clas nth parse var div tar bsp 1 DateTime dt = DateTime.Now; //當前時間 2 DateTime startWeek = dt.AddDays(1 - Convert.ToInt

linux-c獲取utc時間,並轉為BCD碼格式

原始碼: #include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> void UtcBcdTime(char* utc_buf) {

Linux C獲取時間函式例項

例項詳解Linux下C獲取時間函式的程式碼。 一、time 標頭檔案: #include <time.h> 原型: time_t time(time_t *t) time_t的定義: typedef __darwin_time_t  time_t; typedef long

Shell指令碼獲取格式化日期時間總結

!/bin/sh upload logs to hdfs source /etc/profile 獲取昨天日期 yyyyMMdd 格式 yesterday=date --date='1 days ago' +%Y%m%d 獲取昨天日期 yyyy-MM-dd 格式

linux c獲取系統時間

#include<iostream> #include <stdlib.h> #include <stdio.h> #include <sys/time.h> #include <unistd.h> int main(){ struc

js根據時間獲取格式化日期

//格式化時間戳(毫秒) function getFormatDate(timestamp) { var newDate = new Date(timestamp); Date.prototype.fo

c++獲取當前系統時間格式化輸出

#include <string> #include <time.h> using namespace std; string getTime() { time_t timep; time (&timep); char

C#.NET 獲取各種日期時間

DateTime dt = DateTime.Now; //當前時間 DateTime startWeek = dt.AddDays(1 - Convert.ToInt32(dt.DayOfWeek.ToString("d"))); //本週週一 DateTime e

Linux下用C獲取當前系統時間

#include   <time.h> time_t   time(time_t   calptr); 返回的是日曆時間,即國際標準時間公元1970年1月1日00   :   00   :   00以來經過的秒數。然後再呼叫 char   *ctime(const

js 獲取當前日期時間,將當前時間進行各種 格式化

  Date.prototype.format = function (format) {           var args = {               "M+": this.getMonth() + 1,               "d+": this.getDate(),          

C#實戰小技巧(四):獲取當前日期時間

我們可以通過使用DataTime這個類來獲取當前的時間。通過呼叫類中的各種方法我們可以獲取不同的時間:如:日期(2008-09-04)、時間(12:12:12)、日期+時間(2008-09-04 12:11:10)等。 //獲取日期+時間 DateTime.Now.To

js獲取當前日期時間

style col 分鐘 date nds 獲取時間 log code time var myDate=new Date(); myDate.getFullYear();//獲取當前年份(4位) myDate.getMonth();// 獲取當前的月份,但是需要+1因為