1. 程式人生 > >Linux C 中獲取local日期和時間 time()&localtime()函式

Linux C 中獲取local日期和時間 time()&localtime()函式

1.  time() 函式

/*  time - 獲取計算機系統當前的日曆時間(Calender Time)
 *         處理日期時間的函式都是以本函式的返回值為基礎進行運算
 *  函式原型:
 *      #include <time.h>
 *      time_t time(time_t *calptr);
 *
 *  返回值:
 *      成功:秒數,從1970-1-1,00:00:00
 *
 *  使用:
 *      time_t now;
 *      time(&now); // == now = time(NULL);
 */

2.  localtime() 函式

/*
 *  localtime - 將時間數值變換成本地時間,考慮到本地時區和夏令時標誌
 *
 *  函式宣告:
 *      #include <time.h>
 *      struct tm * localtime(const time_t *timer);
 */
/*  struct 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到11 */
    int tm_year;    /*自 1900起的年數 */
    int tm_wday;    /*一週中的第幾天,範圍從0到6 */
    int tm_yday;    /*一年中的第幾天,範圍從0到365 */
    int tm_isdst;   /*夏令時 */
};

3. Demo 

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

#define _DATETIME_SIZE  32

// GetDate - 獲取當前系統日期
/**
 *  函式名稱:GetDate
 *  功能描述:取當前系統日期
 *
 *  輸出引數:char * psDate  - 系統日期,格式為yyymmdd
 *  返回結果:0 -> 成功
 */
int GetDate(char * psDate)
{
    time_t nSeconds;
    struct tm * pTM;
    
    time(&nSeconds); // 同 nSeconds = time(NULL);
    pTM = localtime(&nSeconds);
    
    /* 系統日期,格式:YYYMMDD */
    sprintf(psDate,"%04d-%02d-%02d", 
            pTM->tm_year + 1900, pTM->tm_mon + 1, pTM->tm_mday);
    
    return 0;
}

// GetTime  - 獲取當前系統時間
/**
 *  函式名稱:GetTime
 *  功能描述:取當前系統時間
 *
 *  輸出引數:char * psTime -- 系統時間,格式為HHMMSS
 *  返回結果:0 -> 成功
 */
int GetTime(char * psTime) 
{
    time_t nSeconds;
    struct tm * pTM;
    
    time(&nSeconds);
    pTM = localtime(&nSeconds);
    
    /* 系統時間,格式: HHMMSS */
    sprintf(psTime, "%02d:%02d:%02d",
            pTM->tm_hour, pTM->tm_min, pTM->tm_sec);
           
    return 0;       
}

// GetDateTime - 取當前系統日期和時間
/**
 *  函式名稱:GetDateTime
 *  功能描述:取當前系統日期和時間
 *
 *  輸出引數:char * psDateTime -- 系統日期時間,格式為yyymmddHHMMSS
 *  返回結果:0 -> 成功
 */
int GetDateTime(char * psDateTime)
{
    time_t nSeconds;
    struct tm * pTM;
    
    time(&nSeconds);
    pTM = localtime(&nSeconds);

    /* 系統日期和時間,格式: yyyymmddHHMMSS */
    sprintf(psDateTime, "%04d-%02d-%02d %02d:%02d:%02d",
            pTM->tm_year + 1900, pTM->tm_mon + 1, pTM->tm_mday,
            pTM->tm_hour, pTM->tm_min, pTM->tm_sec);
            
    return 0;
}

// 測試程式碼
int main()
{
    int ret;
    char DateTime[_DATETIME_SIZE];
    
    memset(DateTime, 0, sizeof(DateTime));
    
    /* 獲取系統當前日期 */
    ret = GetDate(DateTime);
    if(ret == 0) 
        printf("The Local date is %s\n", DateTime);
    else 
        perror("GetDate error!");
    
    memset(DateTime, 0, sizeof(DateTime));
    /* 獲取當前系統時間 */
    ret = GetTime(DateTime);
    if(ret == 0) 
        printf("The Local time is %s\n", DateTime);
    else 
        perror("GetTime error!");
    
    memset(DateTime, 0, sizeof(DateTime));
    /* 獲取系統當前日期時間 */
    ret = GetDateTime(DateTime);
    if(ret == 0) 
        printf("The Local date and time is %s\n", DateTime);
    else 
        perror("GetDateTime error!");
    
    return 0;
}

執行結果