我是C新手。當我練習C來隱藏時間刺激來構造tm來回。我注意到一些差異。請諮詢我做錯了什麼。c/C++ strptime()不解析%Z時區名稱
#include <string.h>
#include <stdio.h>
#include <time.h>
/*
test different format string to strptime
" %A, %b %d, %X %z %Y "
" %A, %b %d, %X %Z %Y "
*/
int main(int argc,char *argv[])
{
char date[] = "6 Mar 2001 12:33:45";
char fmt[80];
struct tm tm;
if (argc==1) return 0;
strcpy(fmt,argv[1]);
memset(&tm, 0, sizeof(struct tm));
if (strptime(date,"%d %b %Y %H:%M:%S",&tm)==NULL) printf("error\n");
char buf[128];
strftime(buf, sizeof(buf), fmt, &tm);
printf("%s\n", buf);
printf("%d\n", tm.tm_isdst);
if (strptime(buf,fmt,&tm)==NULL) printf("error\n");
else {
printf("year: %d; month: %d; day: %d;\n",
tm.tm_year, tm.tm_mon, tm.tm_mday);
printf("hour: %d; minute: %d; second: %d\n",
tm.tm_hour, tm.tm_min, tm.tm_sec);
printf("week day: %d; year day: %d\n", tm.tm_wday, tm.tm_yday);
}
return 0;
}
當我使用 「%A,%B%d,%X%Z%Y」 作爲轉換格式參數,該代碼提供一些結果如下:
~/user$ ./test_time " %A, %b %d, %X %z %Y "
Tuesday, Mar 06, 12:33:45 +0000 2001
0
year: 101; month: 2; day: 6;
hour: 12; minute: 33; second: 45
week day: 2; year day: 64
當我改變參數到「%A,%b%d,%X%Z%Y」,代碼無法解析由strftime生成的時間字符串,其格式完全相同。
~/user$ ./test_time " %A, %b %d, %X %Z %Y "
Tuesday, Mar 06, 12:33:45 EET 2001
0
error
我錯過了什麼讓strptime正確解析時區名?
由於提前,
阿爾伯特
這看起來像C給我。爲什麼你要標記C++,特別是C++ 11? –
@Pascal Cuoq你是對的。這是C代碼。我用g ++編譯它。應該沒關係吧? – Albert
只要您牢記以下差異列表,就不應該這樣做。 http://stackoverflow.com/questions/10461331/what-are-the-incompatible-differences-betweeen-c99-and-c11。該頁面甚至沒有列出我的最愛:在C++中,'c'的類型爲'char','c'的類型爲'const char *'。 –