1. 程式人生 > >Linux時間和字元轉換函式

Linux時間和字元轉換函式

//linux作業系統提供的時間操作函式。

時間操作函:
/*
 *  date +%s -d '2004/06/04 20:30:00'  //將時間轉換成毫秒數。
 *  
   int gettimeofday(struct timeval *tv, struct timezone *tz);
   char *asctime(const struct tm *tm);
   char *asctime_r(const struct tm *tm, char *buf);

   char *ctime(const time_t *timep);
   char *ctime_r(const time_t *timep, char *buf);

   struct tm *gmtime(const time_t *timep);
   struct tm *gmtime_r(const time_t *timep, struct tm *result);

   struct tm *localtime(const time_t *timep);
   struct tm *localtime_r(const time_t *timep, struct tm *result);

 */


 struct timeval {

	time_t      tv_sec;     /* seconds */
	suseconds_t tv_usec;    /* microseconds */
};

time_t time(time_t *t);


truct tm {

	int tm_sec;         /* seconds */
	int tm_min;         /* minutes */
	int tm_hour;        /* hours */
	int tm_mday;        /* day of the month */
	int tm_mon;         /* month */
	int tm_year;        /* year */
	int tm_wday;        /* day of the week */
	int tm_yday;        /* day in the year */
	int tm_isdst;       /* daylight saving time */
};

int gettimeofday(struct timeval *tv, struct timezone *tz);
	   
//以上兩個函式是用來獲取當前系統時間的秒數的。 gettimeofday()方法可以獲取當前系統時間的毫秒值。

//將該毫秒值轉換成可讀的字元格式日期的方法如下:

ctime(time_t * time); //直接輸出當前本地時間字串格式。

time()-->gmtime(time_t *time) --> 得到一個 struct tm{} -->asctime(tm *tm);得到時間格式化字串。得到的時間不是本地時間。 

time()-->gmtime(time_t *time) --> 得到一個 struct tm{} -->strftime()  //得到一個自己格式話的一個時間字串

gettimeofday()-->localtime(time_t *time)-->得到一個struct tm{}-->asctime(struct tm *t) //得到一個時間日期字串。

gettimeofday()-->localtime(time_t *time)-->得到一個struct tm{}-->strftime(struct tm * t) //得到一個時間日期字串

mktime(struct tm * t) //可以通過這個將tm結構提轉換成一個time_t,當前時間的秒值。

下面是相關的程式demo:


#include<stdio.h>
#include<stdlib.h>
#include<sys/time.h>
#include<time.h>
void main(void)
{

    struct timeval t;
    int result;
    char *ct=NULL;
    char *asct = NULL;
    struct tm *t1 = NULL;
    char timearray[100] = {'\0'};
    struct timeb;

    result = gettimeofday(&t,NULL);
    if(result < 0 )
    {
        perror("gettimeofday()");
        exit(1);
    }
    ct = ctime(&t.tv_sec);    
    printf("ct = %s \r\n", ct);
    
    //ctime(time_t * t); 和localtime(time_t *t), mktime(tm) (strftime() 格式化字元輸出時間。)
    //這四個函式都受到環境變數TZ的影響。
    t1 = gmtime(&t.tv_sec);    
    
    t1 = localtime(&t.tv_sec);

    printf("t1->hours = %d",t1->tm_hour);
//    strftime(timearray, 100, "%Y-%m-%d %H:%M:%S", t1);
    
//    strftime(timearray, 100, "%Y-%m-%d %X", t1);

//    strftime(timearray, 100, "%Y-%m-%d %T", t1);
    strftime (timearray,sizeof(timearray),"Now is %Y/%m/%d %H:%M:%S",t1);

    printf("%s \r\n",timearray);
        
    asct = asctime(t1);
    
    printf("asct = %s", asct);
  
}