最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言時間轉(zhuǎn)換函數(shù)接口的用法全面講解

 更新時間:2026年01月06日 09:46:28   作者:mftang  
這篇文章主要介紹了C語言中時間處理的常用類型和函數(shù),包括time_t、structtm等,以及time()、localtime()、gmtime()、mktime()、asctime()、ctime()和strftime()等,通過一個示例程序,展示了如何獲取當(dāng)前時間、轉(zhuǎn)換時間格式、計算時間差和進(jìn)行時間操作

概述

在C語言中,時間轉(zhuǎn)換<time.h>:提供了時間處理的相關(guān)函數(shù)和類型。常用類型:time_t(表示時間戳,通常是long類型)、struct tm(分解時間結(jié)構(gòu)體)等。函數(shù)接口主要涉及以下幾個頭文件和函數(shù)。本文主要介紹這些函數(shù)的常用使用方法。

1 時間函數(shù)接口

1.1 接口函數(shù)介紹

在C語言中,時間轉(zhuǎn)換函數(shù)接口主要涉及以下幾個頭文件和函數(shù):

  1. <time.h>:提供了時間處理的相關(guān)函數(shù)和類型。
  2. 常用類型:time_t(表示時間戳,通常是long類型)、struct tm(分解時間結(jié)構(gòu)體)等。

常用的時間轉(zhuǎn)換函數(shù)包括:

  • time_t time(time_t *tloc);   獲取當(dāng)前時間的時間戳。
  • struct tm *localtime(const time_t *timep); 將時間戳轉(zhuǎn)換為本地時間的struct tm結(jié)構(gòu)。
  • struct tm *gmtime(const time_t *timep); 將時間戳轉(zhuǎn)換為UTC時間的struct tm結(jié)構(gòu)。
  • time_t mktime(struct tm *tm); 將struct tm結(jié)構(gòu)的時間轉(zhuǎn)換為時間戳(本地時間)。
  • char *asctime(const struct tm *tm); 將struct tm結(jié)構(gòu)的時間轉(zhuǎn)換為字符串(格式固定)。
  • char *ctime(const time_t *timep); 將時間戳轉(zhuǎn)換為本地時間的字符串(格式固定)。

格式化函數(shù):

  • size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr);
    用于將struct tm格式的時間按照指定格式轉(zhuǎn)換為字符串。

1.2 功能函數(shù)說明

1) C語言中常用的時間轉(zhuǎn)換函數(shù)接口,包括:

  1. 獲取當(dāng)前時間 - 使用time()函數(shù)獲取時間戳,localtime()gmtime()轉(zhuǎn)換為本地時間和UTC時間
  2. 時間轉(zhuǎn)換為字符串 - 使用asctime()ctime()函數(shù)
  3. 自定義時間格式 - 使用strftime()函數(shù)實(shí)現(xiàn)靈活的格式輸出
  4. 計算時間差 - 使用difftime()函數(shù)計算兩個時間點(diǎn)之間的差異
  5. 時間操作 - 使用mktime()函數(shù)對時間結(jié)構(gòu)進(jìn)行規(guī)范化并實(shí)現(xiàn)日期計算

2) tm 數(shù)據(jù)結(jié)構(gòu)

//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//
// Types
//
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
struct tm
{
    int tm_sec;   // seconds after the minute - [0, 60] including leap second
    int tm_min;   // minutes after the hour - [0, 59]
    int tm_hour;  // hours since midnight - [0, 23]
    int tm_mday;  // day of the month - [1, 31]
    int tm_mon;   // months since January - [0, 11]
    int tm_year;  // years since 1900
    int tm_wday;  // days since Sunday - [0, 6]
    int tm_yday;  // days since January 1 - [0, 365]
    int tm_isdst; // daylight savings time flag
};

2 C語言時間轉(zhuǎn)換函數(shù)接口應(yīng)用

下面我將創(chuàng)建一個C語言程序,展示常見的時間轉(zhuǎn)換函數(shù)接口及其使用方法。這個程序會演示如何獲取當(dāng)前時間、轉(zhuǎn)換時間格式以及進(jìn)行各種時間操作。

2.1 獲取當(dāng)前時間

C語言使用time()函數(shù)獲取時間戳,localtime()gmtime()轉(zhuǎn)換為本地時間和UTC時間。

void print_current_time()
 {
    printf("1. 當(dāng)前時間:\n");
    
    time_t raw_time;
    struct tm *time_info;
    
    // 獲取當(dāng)前時間戳
    time(&raw_time);
    
    // 轉(zhuǎn)換為本地時間結(jié)構(gòu)
    time_info = localtime(&raw_time);
    
    printf("   時間戳: %ld\n", raw_time);
    printf("   本地時間: %d-%02d-%02d %02d:%02d:%02d\n",
           time_info->tm_year + 1900, time_info->tm_mon + 1, time_info->tm_mday,
           time_info->tm_hour, time_info->tm_min, time_info->tm_sec);
    
    // 轉(zhuǎn)換為UTC時間
    time_info = gmtime(&raw_time);
    printf("   UTC時間: %d-%02d-%02d %02d:%02d:%02d\n",
           time_info->tm_year + 1900, time_info->tm_mon + 1, time_info->tm_mday,
           time_info->tm_hour, time_info->tm_min, time_info->tm_sec);
}

運(yùn)行程序,得到結(jié)果如下:

1. 當(dāng)前時間:
   時間戳: 1757555139
   本地時間: 2025-09-11 09:45:39
   UTC時間: 2025-09-11 01:45:39

2.2  時間轉(zhuǎn)換為字符串

使用asctime()ctime()函數(shù)用于時間轉(zhuǎn)換為字符串 ,其用法如下:

// 將時間轉(zhuǎn)換為字符串
void convert_time_to_string() 
{
    printf("2. 時間轉(zhuǎn)換為字符串:\n");
    
    time_t raw_time;
    char buffer[80];
    
    time(&raw_time);
    
    // 使用asctime轉(zhuǎn)換為字符串
    printf("   asctime格式: %s", asctime(localtime(&raw_time)));
    
    // 使用ctime轉(zhuǎn)換為字符串
    printf("   ctime格式: %s", ctime(&raw_time));
}

運(yùn)行結(jié)果如下:

2. 時間轉(zhuǎn)換為字符串:
   asctime格式: Thu Sep 11 09:49:05 2025
   ctime格式: Thu Sep 11 09:49:05 2025

2.3 計算時間差

使用difftime()函數(shù)計算兩個時間點(diǎn)之間的差異,其用法如下:

// 計算時間差
void calculate_time_difference() {
    printf("4. 計算時間差:\n");
    
    time_t start, end;
    double diff;
    
    time(&start);
    printf("   開始時間: %s", ctime(&start));
    
    // 模擬一些耗時操作
    for (long i = 0; i < 100000000; i++) {
        // 空循環(huán)
    }
    
    time(&end);
    printf("   結(jié)束時間: %s", ctime(&end));
    
    diff = difftime(end, start);
    printf("   耗時: %.2f 秒\n", diff);
}

運(yùn)行結(jié)果如下:

4. 計算時間差:
   開始時間: Thu Sep 11 09:51:36 2025
   結(jié)束時間: Thu Sep 11 09:51:37 2025
   耗時: 1.00 秒

2.4 時間操作

// 時間操作
void manipulate_time() 
{
    printf("5. 時間操作:\n");
    
    time_t raw_time;
    struct tm *time_info;
    char buffer[80];
    
    time(&raw_time);
    time_info = localtime(&raw_time);
    
    printf("   當(dāng)前時間: %s", asctime(time_info));
    
    // 增加一天
    time_info->tm_mday += 1;
    mktime(time_info); // 規(guī)范化時間結(jié)構(gòu)
    strftime(buffer, sizeof(buffer), "%Y-%m-%d", time_info);
    printf("   明天日期: %s\n", buffer);
    
    // 減少一周
    time_info->tm_mday -= 7;
    mktime(time_info);
    strftime(buffer, sizeof(buffer), "%Y-%m-%d", time_info);
    printf("   一周前日期: %s\n", buffer);
}

運(yùn)行結(jié)果如下:

5. 時間操作:
   當(dāng)前時間: Thu Sep 11 09:53:44 2025
   明天日期: 2025-09-12
   一周前日期: 2025-09-05

2.5 源代碼文件

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <stdint.h>
#include <stddef.h>
#include <errno.h>
#include <stdbool.h>

// 函數(shù)聲明
void print_current_time();
void convert_time_to_string();
void custom_time_format();
void calculate_time_difference();
void manipulate_time();

int test_rtc_main() 
{
    printf("C語言時間轉(zhuǎn)換函數(shù)接口示例\n");
    printf("==========================\n\n");

    // 1. 打印當(dāng)前時間
    print_current_time();
    printf("\n");

    // 2. 時間轉(zhuǎn)換為字符串
    convert_time_to_string();
    printf("\n");

    // 3. 自定義時間格式
    custom_time_format();
    printf("\n");

    // 4. 計算時間差
    calculate_time_difference();
    printf("\n");

    // 5. 時間操作
    manipulate_time();

    return 0;
}

// 打印當(dāng)前時間
void print_current_time() 
{
    printf("1. 當(dāng)前時間:\n");

    time_t raw_time;
    struct tm* time_info;

    // 獲取當(dāng)前時間戳
    time(&raw_time);

    // 轉(zhuǎn)換為本地時間結(jié)構(gòu)
    time_info = localtime(&raw_time);

    printf("   時間戳: %ld\n", raw_time);
    printf("   本地時間: %d-%02d-%02d %02d:%02d:%02d\n",
             time_info->tm_year + 1900, time_info->tm_mon + 1, time_info->tm_mday,
             time_info->tm_hour, time_info->tm_min, time_info->tm_sec);

    // 轉(zhuǎn)換為UTC時間
    time_info = gmtime(&raw_time);
    printf("   UTC時間: %d-%02d-%02d %02d:%02d:%02d\n",
        time_info->tm_year + 1900, time_info->tm_mon + 1, time_info->tm_mday,
        time_info->tm_hour, time_info->tm_min, time_info->tm_sec);
}

// 將時間轉(zhuǎn)換為字符串
void convert_time_to_string() 
{
    printf("2. 時間轉(zhuǎn)換為字符串:\n");

    time_t raw_time;
    char buffer[80];

    time(&raw_time);

    // 使用asctime轉(zhuǎn)換為字符串
    printf("   asctime格式: %s", asctime(localtime(&raw_time)));

    // 使用ctime轉(zhuǎn)換為字符串
    printf("   ctime格式: %s", ctime(&raw_time));
}

// 自定義時間格式
void custom_time_format() 
{
    printf("3. 自定義時間格式:\n");

    time_t raw_time;
    struct tm* time_info;
    char buffer[80];

    time(&raw_time);
    time_info = localtime(&raw_time);

    // 使用strftime自定義格式
    strftime(buffer, sizeof(buffer), "%Y年%m月%d日 %H時%M分%S秒", time_info);
    printf("   中文格式: %s\n", buffer);

    strftime(buffer, sizeof(buffer), "%A, %B %d, %Y", time_info);
    printf("   英文格式: %s\n", buffer);

    strftime(buffer, sizeof(buffer), "日期: %Y-%m-%d 時間: %H:%M:%S", time_info);
    printf("   自定義格式: %s\n", buffer);
}

// 計算時間差
void calculate_time_difference() {
    printf("4. 計算時間差:\n");

    time_t start, end;
    double diff;

    time(&start);
    printf("   開始時間: %s", ctime(&start));

    // 模擬一些耗時操作
    for (long i = 0; i < 100000000; i++) {
        // 空循環(huán)
    }

    time(&end);
    printf("   結(jié)束時間: %s", ctime(&end));

    diff = difftime(end, start);
    printf("   耗時: %.2f 秒\n", diff);
}

// 時間操作
void manipulate_time() {
    printf("5. 時間操作:\n");

    time_t raw_time;
    struct tm* time_info;
    char buffer[80];

    time(&raw_time);
    time_info = localtime(&raw_time);

    printf("   當(dāng)前時間: %s", asctime(time_info));

    // 增加一天
    time_info->tm_mday += 1;
    mktime(time_info);      // 規(guī)范化時間結(jié)構(gòu)
    strftime(buffer, sizeof(buffer), "%Y-%m-%d", time_info);
    printf("   明天日期: %s\n", buffer);

    // 減少一周
    time_info->tm_mday -= 7;
    mktime(time_info);
    strftime(buffer, sizeof(buffer), "%Y-%m-%d", time_info);
    printf("   一周前日期: %s\n", buffer);
}


// 將日期時間轉(zhuǎn)換為Unix時間戳
void convert_human_to_unix(int year, int month, int day, int hour, int min, int sec) 
{
    struct tm timeinfo;
    time_t timestamp;

    // 填充tm結(jié)構(gòu)
    memset(&timeinfo, 0, sizeof(struct tm));
    timeinfo.tm_year = year - 1900;  // 年份從1900開始計算
    timeinfo.tm_mon = month - 1;     // 月份從0開始
    timeinfo.tm_mday = day;
    timeinfo.tm_hour = hour;
    timeinfo.tm_min = min;
    timeinfo.tm_sec = sec;
    timeinfo.tm_isdst = -1;  // 讓系統(tǒng)自動確定夏令時

    // 轉(zhuǎn)換為Unix時間戳
    timestamp = mktime(&timeinfo);

    if (timestamp == -1) {
        printf("   %04d-%02d-%02d %02d:%02d:%02d -> 無效時間\n",
            year, month, day, hour, min, sec);
    }
    else {
        printf("   %04d-%02d-%02d %02d:%02d:%02d -> %ld\n",
            year, month, day, hour, min, sec, timestamp);
    }
}

到此這篇關(guān)于C語言時間轉(zhuǎn)換函數(shù)接口的用法詳解的文章就介紹到這了,更多相關(guān)C時間轉(zhuǎn)換函數(shù)接口用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++按照正態(tài)分布來排列整型數(shù)組元素

    C++按照正態(tài)分布來排列整型數(shù)組元素

    這篇文章主要介紹了C++按照正態(tài)分布來排列整型數(shù)組元素的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • C語言實(shí)現(xiàn)生日賀卡

    C語言實(shí)現(xiàn)生日賀卡

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)生日賀卡的具體方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Qt Creator實(shí)現(xiàn)代碼保存自動格式化功能

    Qt Creator實(shí)現(xiàn)代碼保存自動格式化功能

    本文詳細(xì)介紹如何在QtCreator中設(shè)置代碼自動保存格式化功能,通過配置ClangFormat和Beautifier工具,實(shí)現(xiàn)開發(fā)時專注邏輯化,保存時自動美化,提升團(tuán)隊(duì)效率與代碼可讀性,需要的朋友可以參考下
    2026-06-06
  • C語言for語句用法詳解

    C語言for語句用法詳解

    今天,小編講訴C語言中循環(huán)語句(for)的使用方法,作為示例,以一個簡單的例子講訴for語法。
    2015-11-11
  • 利用上下文屬性將?C++?對象嵌入?QML?里

    利用上下文屬性將?C++?對象嵌入?QML?里

    這篇文章主要介紹了利用上下文屬性將?C++?對象嵌入?QML里,將?QML?對象加載到?C++?應(yīng)用程序中時,直接嵌入一些可在?QML?代碼中使用的?C++?數(shù)據(jù)會很有用。例如,這使得在嵌入對象上調(diào)用?C++?方法或使用?C++?對象實(shí)例作為?QML?視圖的數(shù)據(jù)模型成為可能,下面一起來學(xué)習(xí)該內(nèi)容吧
    2021-12-12
  • C++使用libcurl輕松實(shí)現(xiàn)文件下載

    C++使用libcurl輕松實(shí)現(xiàn)文件下載

    這篇文章將用最簡單的方式,帶大家掌握C++ + libcurl實(shí)現(xiàn)文件下載的核心技術(shù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2025-08-08
  • Qt學(xué)習(xí)之QListWidget控件的使用教程詳解

    Qt學(xué)習(xí)之QListWidget控件的使用教程詳解

    這篇文章主要為大家詳細(xì)介紹了Qt中QListWidget控件的使用教程,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Qt有一定的幫助,需要的可以參考一下
    2022-12-12
  • C++跳轉(zhuǎn)語句之Goto對變量定義的影響詳解

    C++跳轉(zhuǎn)語句之Goto對變量定義的影響詳解

    goto語句也被稱為無條件轉(zhuǎn)移語句,這篇文章主要介紹了C++跳轉(zhuǎn)語句之Goto對變量定義的影響,文中通過示例代碼解文字介紹的很詳細(xì),相信對大家的理解和學(xué)習(xí)具有一定的參考借鑒價值,有需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2016-11-11
  • C語言中字符串與各數(shù)值類型之間的轉(zhuǎn)換方法

    C語言中字符串與各數(shù)值類型之間的轉(zhuǎn)換方法

    這篇文章主要介紹了C語言中字符串與各數(shù)值類型之間的轉(zhuǎn)換方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C語言中棧的兩種實(shí)現(xiàn)方法

    C語言中棧的兩種實(shí)現(xiàn)方法

    棧的實(shí)現(xiàn)方式有兩種,一種方法是使用指針,而另一種方法則是使用數(shù)組,這篇文章主要介紹了C語言中棧的兩種實(shí)現(xiàn)方法,需要的朋友可以參考下
    2021-08-08

最新評論

盐津县| 嘉义市| 腾冲县| 屯门区| 台北市| 昌平区| 文安县| 新乐市| 包头市| 石楼县| 松桃| 会宁县| 定西市| 平塘县| 嘉禾县| 平和县| 双辽市| 深水埗区| 新疆| 临夏市| 婺源县| 图们市| 乐东| 邛崃市| 巴东县| 安平县| 冕宁县| 海伦市| 安西县| 林甸县| 黎平县| 海淀区| 临沭县| 南溪县| 青海省| 沙坪坝区| 长葛市| 德保县| 静宁县| 宝清县| 慈溪市|