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;
}

運行結果

4.  后記

 

誡子書 - 諸葛亮

 

夫君子之行,靜以修身,儉以養德。

非淡泊無以明志,非寧靜無以致遠。

夫學須靜也,才須學也,非學無以廣才,非志無以成學。

淫慢則不能勵精,險躁則不能冶性。

年與時馳,意與日去,遂成枯落,多不接世,悲守窮廬,將復何及!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM