English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

例如,我從文件中讀出一個字串char chlogtime="23/Jul/2006:00:00:00" 然後接下來要拿它跟別的字串比先後順序,字串應該是不能比的, 所以要如何把它從文字轉成時間函數呢?

2006-07-25 13:48:04 · 3 個解答 · 發問者 Cindy 6 in 電腦與網際網路 程式設計

我剛才查了一下書,
書裡只有strftime, 但它好像是把時間轉字串,
至於scanf的用法…目前找不到,
可否麻煩大大再補充一下,謝謝!!

2006-07-26 07:52:33 · update #1

兩位的程式我都看不太懂,
放進編輯程式,也無法compiler成功耶…

可否加些註解呢?謝謝!!

2006-08-02 11:27:31 · update #2

3 個解答

你要不要試試 strptime?
你用的是啥 compiler?

2006-07-25 19:57:52 補充:
不然你就要用 scanf("%d/%s/%d:%d:%d", &dat, mon, &year, &hour, &,month, &sec);

2006-07-25 20:01:47 補充:
不好意思,&,month 中的那個 , 是多餘的!還出不來,再補充。(火燒屁屁沒空詳解。還要再燒 36 小時。36小時以後還有問題,我可以寫再詳細一點。)加油! ^_^

2006-07-25 20:03:27 補充:
#define _XOPEN_SOURCE
#include
char *strptime(const char *s, const char *format, struct tm *tm);

Linux C 的 manual 裡是這麼寫的

2006-07-29 22:01:23 補充:
#include #include void *convert(char *buf){ char mon[4]; int year, dat, hour, min, sec, i; char *nam[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};

2006-07-29 22:02:54 補充:
sscanf(buf, "%d/%3s/%d:%d:%d:%d", &dat, mon, &year, &hour, &min, &sec); for (i=0; i<12; i++) if(!strcmpi(mon, nam[i])) break; sprintf(buf, "%04d/%02d/%02d %02d:%02d:%02d", year, i+1, dat, hour, min, sec); return buf;}

2006-07-29 22:03:53 補充:
void main(void){ char *dt1 = "27/May/1998:22:31:30", *dt2 = "19/Jul/2000:22:27:45"; int i; convert(dt1); convert(dt2); if((i=strcmp(dt1, dt2)) > 0) printf("%s > %s\n", dt1, dt2); else if(i) printf("%s < %s\n", dt1, dt2); else printf("%s = %s\n", dt1, dt2);}

2006-07-29 22:07:57 補充:
不好意思,回答時太忙,不但多打了〝,〞,連 min 打成了 month 到剛才才發現。自由軟體的寫法比較標準、比較深。scanf 的重點在於中間那個 3 , / 和 :,以及後面那一堆東東前的 &。(除了 mon 前不用加)還有不懂再問。^_^

2006-07-25 15:49:27 · answer #1 · answered by ? 7 · 0 0

將字串拆開再稍微重新排列一下應該就可以比了,試試看吧char *Rearrangement(char *buf, char *delims){ char *s, *list[10], cBuf[64]; int  cnt = 0, m; char *mon[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun",      "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};  s = strtok(buf, delims);   while( s != NULL ) {    list[cnt++] = s;     s = strtok(NULL, delims);   }   for( m = 0; m < 12; m ++ ) {    if( strcmpi(list[1], mon[m]) == 0 ) break; }   sprintf(cBuf, "%04d/%02d/%02d-%02d:%02d:%02d", atoi(list[2]), m+1, atoi(list[0]),    atoi(list[3]), atoi(list[4]), atoi(list[5])); strcpy(buf, cBuf);   return buf;}void main(void){  char *delims = "/:\n";  char *tm1 = "27/Jul/2006:20:52:30";  char *tm2 = "25/Jan/2006:23:30:00";  int res;  Rearrangement(tm1, delims);  Rearrangement(tm2, delims);  res = strcmp(tm1, tm2);  if( res > 0 )   printf("%s > %s\n", tm1, tm2);  else if( res < 0 ) printf("%s < %s\n", tm1, tm2);  else printf("%s = %s\n", tm1, tm2);  system("pause");}

2006-07-27 17:05:07 · answer #2 · answered by elastic 7 · 0 0

那我順便問一下好了,Jacob大大所說的strptime函數是在那個標頭檔裡呀?

2006-07-25 15:54:19 · answer #3 · answered by Almond 6 · 0 0

fedest.com, questions and answers