本文詳細介紹語言中對時間和日期的處理
Chuck Allison 是鹽湖城聖 Latter Day 教堂總部下耶稣教堂家族歷史研究處的軟件體系設計師。他擁有數學學士和數學碩士學位。他從1975年起開始編程,從1984年起他開始從事c語言的教學和開發。他目前的興趣是面向對象的技術及其教育。他是X3J16,ANSI C ++標准化委員會的一員。發送e-mail到 [email protected],或者撥打電話到 (801)240-4510 均可以與他取得聯系。
大部分的操作系統有辦法得到當前的日期和時間。通過定義在time.h的庫函數,ANSI C能以許多不同的形式得到這個信息。函數time返回一個類型為time_t的值(通常為long),該函數在運行期間對當前的日期和時間進行編碼。然後你可以將這個返回值傳遞給其他能對該值進行解碼和格式化的函數。
Listing 1 中的程序使用函數time,localtime和strftime以不同的形式輸出當前的日期和時間。函數localtime把已經編碼的時間解碼成如下的struct:struct tm
{
int tm_sec; /* (0 - 61) */
int tm_min; /* (0 - 59) */
int tm_hour; /* (0 - 23) */
int tm_mday; /* (1 - 31) */
int tm_mon; /* (0 - 11) */
int tm_year; /* past 1900 */
int tm_wday; /* (0 - 6) */
int tm_yday; /* (0 - 365) */
int tm_isdst; /* daylight savings flag */
};
每次當你調用localtime的時候,它會重寫一個靜態的結構並返回該結構的地址(因此同一時刻在一個程序中只能取得一個這樣的結構,而不能做明顯的拷貝)。函數ctime返回一個指向靜態字符串的指針,該字符串以標准的格式包含了完整的時間和日期。strftime根據用戶的指定格式格式化字符串(例如,%A代表一周中每一天的名稱)。Table 1列出了格式描述符的完整列表。