首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言獲取當前日期時間並作為文件名創建文件:time.h 完整實現

     編輯:程式設計綜合問答

核心 API ()

函數/結構體作用
`time_t time(time_t *t)` 獲取當前日曆時間 (自 1970-01-01 00:00:00 UTC 秒數)
`struct tm *localtime(const time_t *t)` 轉換為本地時間分量 (年/月/日/時/分/秒/星期/年間天數/夏令時)
`struct tm *gmtime(const time_t *t)` 轉換為 UTC 時間
`char *asctime(const struct tm *tm)` 格式化為固定字符串 "Wed Jan 06 10:30:45 2027\n\0"
`size_t strftime(char *s, size_t max, const char *fmt, const struct tm *tm)` **自定義格式化** (核心),返回寫入字符數

tm 結構體關鍵字段

struct tm {
    int tm_sec;   // 秒 [0,60] (含閏秒)
    int tm_min;   // 分 [0,59]
    int tm_hour;  // 時 [0,23]
    int tm_mday;  // 日 [1,31]
    int tm_mon;   // 月 [0,11] (0=1月) **注意 +1**
    int tm_year;  // 年 (從1900起) **注意 +1900**
    int tm_wday;  // 星期 [0,6] (0=星期日)
    int tm_yday;  // 年間天數 [0,365]
    int tm_isdst; // 夏令時標志
};

創建以日期命名文件完整代碼

#include 
#include 
#include 

int main() {
    time_t now = time(NULL);
    struct tm *local = localtime(&now);
    if (!local) { perror("localtime"); return 1; }

    char filename[64];
    // 格式: YYYYMMDD_HHMMSS.txt (排序友好、無非法字符)
    size_t len = strftime(filename, sizeof(filename), 
                          "%Y%m%d_%H%M%S.txt", local);
    if (len == 0) { fprintf(stderr, "strftime 緩衝區不足\n"); return 1; }

    FILE *fp = fopen(filename, "w");
    if (!fp) { perror("fopen"); return 1; }

    fprintf(fp, "文件創建時間: %s\n", asctime(local));
    fclose(fp);
    printf("已創建文件: %s\n", filename);
    return 0;
}

常用 strftime 格式字符

格式含義示例
`%Y`四位年份2027
`%m`兩位月份 (01-12)01
`%d`兩位日期 (01-31)06
`%H`24制小時 (00-23)10
`%M`分鐘 (00-59)30
`%S`秒 (00-60)45
`%F`等價 `%Y-%m-%d`2027-01-06
`%T`等價 `%H:%M:%S`10:30:45
`%s`Unix 時間戳 (秒)1704507045

跨平台注意事項

  • Windows `fopen` 不支持 UTF-8 文件名 (需 `_wfopen` + 寬字符),但純 ASCII 日期格式無影響。
  • 文件系統禁用字符:Windows `< > : " / \ | ? *`,Linux 僅 `/` 和 `\0`,上述 `%Y%m%d_%H%M%S` 全平台安全。
  • 線程安全:`localtime` 返回靜態緩衝區指針,**多線程環境用 `localtime_r` (POSIX) 或 `localtime_s` (C11/Windows)**。

線程安全版本 (C11)


struct tm local;
if (localtime_s(&local, &now) != 0) { /* error */ }
strftime(filename, sizeof(filename), "%Y%m%d_%H%M%S.txt", &local);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved