在Linux中經常會遇到時間和字符串相互轉化的情形,有兩個函數專門對應相應的轉化。
1、時間轉字符串函數strftime
函數原型:size_t strftime(char *s,size_t maxsize,char *format,conststruct tm *timeptr)
strftime函數對timeptr指向的tm結構所代表的時間和日期進行格式編排,其結果放在字符串s中。該字符串的長度被設置為(最少)maxsize個字符。格式字符串format用來對寫入字符串的字符進行控制,它包含着將被傳送到字符串里去的普通字符以及編排時間和日期格式的轉換控制符。
輸入:const struct tm *timeptr
輸出:char *s,size_t maxsize,char *format
2、字符串轉時間函數strptime
函數原型: char *strptime(const char *buf,const char*format,struct tm *timeptr)
format字符串的構建方式和strftime的format字符串完全一樣,strptime返回一個指針,指向轉換過程處理的最后一個字符后面的那個字符,
輸入:const char *buf,const char *format
輸出:struct tm *timeptr
實驗代碼:
#include <stdio.h>
#include <time.h>
int main()
{
struct tm tm_time;
strptime("2010-11-15 10:39:30", "%Y-%m-%d %H:%M:%S", &tm_time);
printf("%ld/n", mktime(&tm_time));
printf("-------------------------------------/n");
char szBuf[256] = {0};
time_t timer = time(NULL);
strftime(szBuf, sizeof(szBuf), "%Y-%m-%d %H:%M:%S", localtime(&timer));
printf("%s/n", szBuf);
return 0;
}
運行結果:
1289788770
-------------------------------------
2017-07-11 19:4
轉換控制符見下表:
轉換控制符 |
說明 |
%a |
星期幾的簡寫形式 |
%A |
星期幾的全稱 |
%b |
月份的簡寫形式 |
%B |
月份的全稱 |
%c |
日期和時間 |
%d |
月份中的日期,0-31 |
%H |
小時,00-23 |
%I |
12進制小時鍾點,01-12 |
%j |
年份中的日期,001-366 |
%m |
年份中的月份,01-12 |
%M |
分,00-59 |
%p |
上午或下午 |
%S |
秒,00-60 |
%u |
星期幾,1-7 |
%w |
星期幾,0-6 |
%x |
當地格式的日期 |
%X |
當地格式的時間 |
%y |
年份中的最后兩位數,00-99 |
%Y |
年 |
%Z |
地理時區名稱
|