Linux c time模塊函數庫

 

時間模塊須要引入time.h頭文件ide

#include <time.h>

 

1. c獲取時間戳

#include <stdio.h>
#include <time.h>

// 格林威治時間戳

void my_time(){
    // 這裏最好是long int
    int time1 = 0;
    // 方法1
    time(&time1);
    printf("time1 is :%d \n", time1); // time1 is :1548137793

    // 方法2
    time_t time2 = 0;
    time2 = time(NULL);
    printf("time2 is :%d \n", time2); // time1 is :1548137793

}

int main(){
    my_time();
    return 0;
}

 

2. c 得到時間字符串,或者將時間戳轉換成字符串

#include<stdio.h>
#include<time.h>

#define N 20
int main( void ) { struct tm *newtime; char tmpbuf[N]; time_t test; time(&test); printf("%d\n", test); // 1548138728 // 將時間戳轉換成字符串 newtime=localtime(&test); strftime(tmpbuf, N, "%Y-%m-%d %H:%M:%S\n", newtime); printf(tmpbuf); // 2019-01-22 14:32:08 return 0; }

 

那爲何呢?C語言定義告終構體struct tm函數

/* ISO C `broken-down time' structure.  */
struct tm
{
  int tm_sec;            /* Seconds.    [0-60] (1 leap second) */
  int tm_min;            /* Minutes.    [0-59] */
  int tm_hour;            /* Hours.    [0-23] */
  int tm_mday;            /* Day.        [1-31] */
  int tm_mon;            /* Month.    [0-11] */
  int tm_year;            /* Year    - 1900.  */
  int tm_wday;            /* Day of week.    [0-6] */
  int tm_yday;            /* Days in year.[0-365]    */
  int tm_isdst;            /* DST.        [-1/0/1]*/

# ifdef    __USE_MISC
  long int tm_gmtoff;        /* Seconds east of UTC.  */
  const char *tm_zone;        /* Timezone abbreviation.  */
# else
  long int __tm_gmtoff;        /* Seconds east of UTC.  */
  const char *__tm_zone;    /* Timezone abbreviation.  */
# endif
};
源碼

 

經常使用組合: 測試

%Y-%m-%d %H:%M:%S

 

%%:顯示字元%

%a:星期之縮寫

%A:星期之全名

%b:月份之縮寫

%B:月份之全名

%c:日期與時間

%d:兩位數之日(01 - 31)

%H:兩位數之24小時制(00 - 23)

%I :兩位數之12小時制(01 - 12)

%j:三位數之日數(001 - 366)

%m:兩位數之月(1 - 12)

%M:兩位數之分(00 - 59)

%p:表明AM或PM

%S:兩位數之秒(00 - 59)

%U:兩位數之星期數(00 - 53),以星期日爲第一天

%w:星期之表示(0 - 6),0爲星期日

%W:兩位數之星期數(00 - 53),以星期一爲第一天(00 - 53)

%x:日期, %X:時間, %y:兩位數之年(00to 99)

%Y:西元年, %Z:時間區名稱

 

3. 將字符串轉換成時間戳

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define N 20

int main(int argc, const char *argv[]) {

    // 3. 將字符串轉換成時間戳
    struct tm *tmp_time = (struct tm *) malloc(sizeof(struct tm));
    //上面只是爲了測試程序,註釋這個是常常用的
    strptime("2019-01-22 15:10:00", "%Y-%m-%d %H:%M:%S", tmp_time); //時間24時制
    time_t t = mktime(tmp_time); // 將對象轉出時間戳
    printf("%ld\n", t);
    free(tmp_time);// 釋放內存
    return 0;
}

 

4.得到UTC時間(經過結構圖調用參數的方式)

#include <stdio.h>
#include <time.h>
 
int main(void)
{
    time_t timeValue = 0;
    struct tm *p = NULL;
 
    time(&timeValue);
    p = gmtime(&timeValue);
    printf("如今的時間(UTC)是 = %d年%d月%d日 星期%d %d時%d分%d秒 \n",
           p->tm_year+1900,
           p->tm_mon+1,
           p->tm_mday,
           p->tm_wday,
           p->tm_hour,
           p->tm_min,
           p->tm_sec);
 
    return 0;
}

 

5.各類時間類型相互轉換

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define N 20

int main(int argc, const char *argv[]) {
    time_t timeValue = 0;
    struct tm *p = NULL;
    char tmpbuf[N];

    // 1.得到時間戳
    time(&timeValue);
    printf("時間戳 = %ld\n", timeValue); // timeValue:1548141000

    // 2.將時間戳轉換成字符串
    p = localtime(&timeValue);
    strftime(tmpbuf, N, "%Y-%m-%d %H:%M:%S", p);
    printf("字符串時間 = %s\n",tmpbuf); // tmpbuf:2019-01-22 15:10:00

    // 3. 將字符串轉換成時間戳
    struct tm *tmp_time = (struct tm *) malloc(sizeof(struct tm));
    strptime(tmpbuf, "%Y-%m-%d %H:%M:%S", tmp_time); //時間24時制, 將時間轉出對象形式
    //上面只是爲了測試程序,註釋這個是常常用的
    // strptime("2019-01-22 15:10:00", "%Y-%m-%d %H:%M:%S", tmp_time); //時間24時制
    time_t t = mktime(tmp_time); // 將對象轉出時間戳
    printf("%ld\n", t);
    free(tmp_time);// 釋放內存
    return 0;
}

 

localtime的例子
#include <stdio.h>
#include <time.h>

#define N 20

int main(void)
{
    time_t timeValue = 0;
    struct tm *p = NULL;
    char tmpbuf[N];

    // 時間戳
    time(&timeValue);
    printf("時間戳 = %ld\n",timeValue);
    //將時間戳轉換成字符串
    p = localtime(&timeValue);
    strftime(tmpbuf, N, "%Y-%m-%d %H:%M:%S", p);
    printf("字符串時間 = %s\n",tmpbuf);
    // 將字符串轉化成時間戳
    timeValue = mktime(p);
    printf("轉換以後的時間秒數是 = %ld\n",timeValue);

    return 0;
}

 

6.模塊包含的其餘函數

time,ctime,gmtime,localtime,asctime,mktime

 

相比我以爲用的不是特別多,上面的例子就夠用了。spa

參考blog連接:https://blog.csdn.net/qq_33706673/article/details/78907161.net

相關文章
相關標籤/搜索