c語言strptime,c語言strpy

本文目錄一覽:

C語言中的常用的幾種系統時間結構體類型

在C語言涉及中經常需要定時觸發事件,涉及到獲取系統時間,其結構體類型有多種。Unix/Linux系統下有以下幾種時間結構:

1、time_t 類型:長整型,一般用來表示從1970-01-01 00:00:00時以來的秒數,精確度:秒;由函數time()獲取;

該類型定義在頭文件 /usr/include/sys/time.h 中:

#define _TIME_T

typedef long time_t;

#endif

函數定義:time_t time(time_t* lpt);

如:time_t time = time(NULL);

2、struct timeb 結構:它有兩個主要成員,一個是秒,另一個是毫秒;精確度:毫秒(10E-3秒);

由函數ftime()獲取struct timeb結構的時間;其定義如下:

struct timeb

{

time_t time;

unsigned short millitm;

short timezone;

short dstflag;

};

#include sys/timeb.h

int ftime(struct timeb* tp);

調用成功返回0;調用失敗返回-1;

3、struct timeval 結構,它有兩個成員;一個是秒,另一個表示微秒,精確度:微秒(10E-6);

由函數gettime0fday()獲取;

struct timeval結構定義為:

struct timeval

{

long tv_sec;

long tv_usec;

}

讀取struct timeval結構數據的函數說明:

#include sys/time.h

int gettimeofday(struct timeval* tv,struct timezone* tz);

該函數會提取系統當前時間,並把時間分為秒和微秒兩部分填充到結構struct timeval中;同時把當地的時區信

息填充到結構struct timezone中;

返回值:成功則返回0,失敗返回-1,錯誤代碼存於errno。附加說明EFAULT指針tv和tz所指的內存空間超出存

取權限。

struct timezone結構的定義為:

struct timezone

{

int tz_minuteswest;

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

4、struct timespec 結構:它是POSIX.4標準定義的一個時間結構,精確度:納秒(10E-9秒);

由函數gethrestime()或gethrestime_lasttick()獲取當前系統struct timespec結構的時間;其定義如下:

struct timespec

{

time_t tv_sec;

long tv_nsec;

};

typedef struct timespec timespec_t;

該結構定義在頭頭文件 /usr/include/sys/time_impl.h 中;

extern void gethrestime(timespec_t*);

extern void gethrestime_lasttick(timespec_t*);

5、clock_t 類型:由函數clock()獲取;

#include time.h

clock_t clock(void);

該函數以微秒的方式返回CPU的時間;

類型 clock_t 定義在頭文件/usr/include/sys/types.h中:

#ifndef _CLOCK_T

#define _CLOCK_T

typedef long clock_t;

#endif

6、struct tm 結構:由函數gmtime()解析time_t得到

struct tm*gmtime(const time_t*timep);

函數說明:gmtime()將參數timep 所指的time_t 結構中的信息轉換成真實世界所使用的時間日期表示方法,然後

將結果由結構tm返回。

結構tm的定義為

struct tm

{

int tm_sec;

int tm_min;

int tm_hour;

int tm_mday;

int tm_mon;

int tm_year;

int tm_wday;

int tm_yday;

int tm_isdst;

};

int tm_sec 代表目前秒數,正常範圍為0-59,但允許至61秒

int tm_min 代表目前分數,範圍0-59

int tm_hour 從午夜算起的時數,範圍為0-23

int tm_mday 目前月份的日數,範圍01-31

int tm_mon 代表目前月份,從一月算起,範圍從0-11

int tm_year 從1900 年算起至今的年數

int tm_wday 一星期的日數,從星期一算起,範圍為0-6

int tm_yday 從今年1月1日算起至今的天數,範圍為0-365

int tm_isdst 日光節約時間的旗標

此函數返回的時間日期未經時區轉換,而是UTC時間。

返回值:返回結構tm代表目前UTC 時間

7、Unix對時間單位的定義:

#define SEC 1 // 秒

#define MILLISEC 1000 // 毫秒

#define MICROSEC 1000000 // 微秒

#define NANOSEC 1000000000 // 納秒

8、時間格式化函數:

size_t strftime(char *str,size_t max,char *fmt,struct tm *tp); strftime有點像sprintf,其格式由fmt來指定。

%a : 本第幾天名稱,縮寫

%A : 本第幾天名稱,全稱

%b : 月份名稱,縮寫

%B : 月份名稱,全稱

%c : 與ctime/asctime格式相同

%d : 本月第幾日名稱,由零算起

%H : 當天第幾個小時,24小時制,由零算起

%I : 當天第幾個小時,12小時制,由零算起

%j : 當年第幾天,由零算起

%m : 當年第幾月,由零算起

%M : 該小時的第幾分,由零算起

%p : AM或PM

%S : 該分鐘的第幾秒,由零算起

%U : 當年第幾,由第一個日開始計算

%W : 當年第幾,由第一個一開始計算

%w : 當第幾日,由零算起

%x : 當地日期

%X : 當地時間

%y : 兩位數的年份

%Y : 四位數的年份

%Z : 時區名稱的縮寫

%% : %符號

char * strptime(char *s,char *fmt,struct tm *tp); 如同scanf一樣,解譯字串成為tm格式

%h : 與%b及%B同

%c : 讀取%x及%X格式

%C : 讀取%C格式

%e : 與%d同

%D : 讀取%m/%d/%y格式

%k : 與%H同

%l : 與%I同

%r : 讀取”%I:%M:%S %p”格式

%R : 讀取”%H:%M”格式

%T : 讀取”%H:%M:%S”格式

%y : 讀取兩位數年份

%Y : 讀取四位數年份

希望可以幫到你,謝謝!

C語言問題,關於日期倒計時(附說明,謝謝)

/**

程序說明:很遺憾地告訴你,strptime()這個函數在Windows平台上是沒有的,以下是在Linux系統編譯運行的結果。

2017 05 04

今天: 2017 03 29

倒計時:離大賽還有36天

*/

#include stdio.h

#include time.h

int main()

{

int year,month,day;

time_t now;

char buf[64];

struct tm *today;

struct tm future;

int countdown;

scanf(“%d%d%d”,year,month,day);

sprintf(buf,”%d-%d-%d”,year,month,day);

strptime(buf,”%Y-%m-%d”,future);

now=time(NULL);

today=localtime(now);

countdown=future.tm_yday-today-tm_yday;

sprintf(buf,”%4d %02d %02d”,today-tm_year + 1900, today-tm_mon + 1, today-tm_mday);

printf(“今天: %s\n”,buf);

printf(“倒計時:離大賽還有%d天\n”,countdown);

return 0;

}

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秒。

c語言中strptime的參數分別代表什麼?

s

時間字符串指針

fmt

格式字符串指針

tp

保存轉換後結果的時間結構體指針

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/303627.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-31 11:50
下一篇 2024-12-31 11:50

相關推薦

  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28
  • Python基礎語言

    Python作為一種高級編程語言擁有簡潔優雅的語法。在本文中,我們將從多個方面探究Python基礎語言的特點以及使用技巧。 一、數據類型 Python基礎數據類型包括整數、浮點數、…

    編程 2025-04-28

發表回復

登錄後才能評論