strftime和strptime使用

[singlepic id=32 w=320 h=240 float=left]整理自《linux程序設計》
這兩個函數都是時間日期的格式控制函數,在功能上看起來正好相反。strftime將一個tm結構格式化爲一個字符串,strptime則是將一個字符串格式化爲一個tm結構。

  • strftime

函數原型:size_t strftime(char *s,size_t maxsize,char *format,const struct tm *timeptr)
strftime函數對timeptr指向的tm結構所代表的時間和日期進行格式編排,其結果放在字符串s中。該字符串的長度被設置爲(最少)maxsize個字符。格式字符串format用來對寫入字符串的字符進行控制,它包含着將被傳送到字符串裏去的普通字符以及編排時間和日期格式的轉換控制符。轉換控制符見下表

轉換控制符 說明
%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 地理時區名稱

具體的控制轉換符說明可以查看man.

  • strptime

函數原型: char *strptime(const char *buf,const char *format,struct tm *timeptr)

format字符串的構建方式和strftime的format字符串完全一樣。strptime返回一個指針,指向轉換過程處理的最後一個字符後面的那個字符。

看下邊一個程序

#include 
#include 
#include 
#include 

int main(){
  struct tm *tm_ptr,timestruct;
  time_t the_time;
  char *buf[256];

  (void) time(&the_time);
  tm_ptr=localtime(&the_time);
  strftime(buf,256,"%A %d %B,%I:%S %p",tm_ptr);
  printf("strftime gives: %s\n",buf);

  strcpy(buf,"Sat 26 July 2003,17:53 will do fine");

  printf("calling strptime with: %s\n",buf);
  tm_ptr+&timestruct;

  result=strptime(buf,"%a %d %b %Y,%R",tm_ptr);
  printf("strptime consumed up to: %s\n",result);

  printf("strptime gives:\n");
  printf("date: %02d/%02d/%02d\n",tm_ptr->tm_year%100,tm_ptr->tm_mon+1,tm_ptr->tm_mday);
  printf("time: %02d:%02d\n",tm_ptr->tm_hour,tm_ptr->tm_min);
  exit(0);
}

運行後輸出
strftime gives:Sunday 06 June, 11:55 AM
calling strptime with:Sat 26 July 2003,17:53 will do fine
strptime consumed up to:will do fine
strptime gives:
date: 03/07/26
time: 17:53

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章