【C语言】时间函数详解

news2024/12/23 12:50:17

LuckiBit

目录

  • C语言时间函数详解
    • 表格汇总
    • 1. `time`
    • 2. `localtime`
    • 3. `gmtime`
    • 4. `strftime`
    • 5. `clock`
    • 6. `difftime`
      • 函数详解
        • 示例解释
    • 7. `mktime`
    • 8. `asctime`
    • 9. `ctime`
    • 10. `clock_gettime` 和 `clock_settime`
    • 总结
    • 9. 结束语
    • 相关文章:

C语言时间函数详解

在C语言中,时间处理功能由标准库 time.h 提供。使用这些函数时,需要包含 #include <time.h> 头文件。以下是一些常用的时间函数的详细讲解,包括函数原型、参数说明、返回值说明以及示例代码和表格汇总。

表格汇总

函数作用示例输出
time获取当前时间time(NULL)时间戳
localtime将时间戳转换为本地时间结构体localtime(&timestamp)struct tm 结构体
gmtime将时间戳转换为UTC时间结构体gmtime(&timestamp)struct tm 结构体
strftime格式化时间为字符串strftime(buffer, size, format, &tm)格式化后的时间字符串
clock获取程序运行时间clock()CPU时间
difftime计算两个时间点之间的差值difftime(end, start)时间差(秒)
mktimestruct tm转换为时间戳mktime(&tm)时间戳

1. time

函数原型:

time_t time(time_t *t);

参数说明:

  • t: 如果不为 NULL,则函数将当前时间存储在 t 指向的变量中。

返回值说明:

  • 返回当前的时间戳(从1970年1月1日00:00:00 UTC到现在的秒数)。

示例代码:

#include <stdio.h>
#include <time.h>

int main() {
    time_t current_time;
    current_time = time(NULL);
    printf("当前时间戳: %ld\n", (long)current_time); // 输出: 当前时间戳: 1634602475
    return 0;
}

表格说明:

函数作用示例输出
time获取当前时间time(NULL)当前时间戳

2. localtime

函数原型:

struct tm *localtime(const time_t *timep);

参数说明:

  • timep: 指向 time_t 类型的时间戳。

返回值说明:

  • 返回指向 struct tm 结构体的指针,该结构体包含本地时间的详细信息。

示例代码:

#include <stdio.h>
#include <time.h>

int main() {
    time_t current_time;
    struct tm *local_time;

    current_time = time(NULL);
    local_time = localtime(&current_time);

    printf("本地时间: %04d-%02d-%02d %02d:%02d:%02d\n",
           local_time->tm_year + 1900,
           local_time->tm_mon + 1,
           local_time->tm_mday,
           local_time->tm_hour,
           local_time->tm_min,
           local_time->tm_sec); // 输出: 本地时间: 2024-08-15 12:34:56
    return 0;
}

表格说明:

函数作用示例输出
localtime将时间戳转换为本地时间结构体localtime(&current_time)本地时间: 2024-08-15 12:34:56

3. gmtime

函数原型:

struct tm *gmtime(const time_t *timep);

参数说明:

  • timep: 指向 time_t 类型的时间戳。

返回值说明:

  • 返回指向 struct tm 结构体的指针,该结构体包含UTC时间的详细信息。

示例代码:

#include <stdio.h>
#include <time.h>

int main() {
    time_t current_time;
    struct tm *utc_time;

    current_time = time(NULL);
    utc_time = gmtime(&current_time);

    printf("UTC时间: %04d-%02d-%02d %02d:%02d:%02d\n",
           utc_time->tm_year + 1900,
           utc_time->tm_mon + 1,
           utc_time->tm_mday,
           utc_time->tm_hour,
           utc_time->tm_min,
           utc_time->tm_sec); // 输出: UTC时间: 2024-08-15 04:34:56
    return 0;
}

表格说明:

函数作用示例输出
gmtime将时间戳转换为UTC时间结构体gmtime(&current_time)UTC时间: 2024-08-15 04:34:56

4. strftime

函数原型:

size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *tm);

参数说明:

  • str: 指向存储格式化时间字符串的缓冲区。
  • maxsize: 缓冲区的最大大小。
  • format: 格式化时间的格式字符串。
  • tm: 指向 struct tm 结构体的指针。

返回值说明:

  • 返回格式化字符串的长度。如果返回值等于0,则表示缓冲区不够大,未能完全写入。

示例代码:

#include <stdio.h>
#include <time.h>

int main() {
    time_t current_time;
    struct tm *local_time;
    char buffer[80];

    current_time = time(NULL);
    local_time = localtime(&current_time);

    strftime(buffer, sizeof(buffer), "当前时间: %Y-%m-%d %H:%M:%S", local_time);
    printf("%s\n", buffer); // 输出: 当前时间: 2024-08-15 12:34:56
    return 0;
}

表格说明:

函数作用示例输出
strftime格式化时间为字符串strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", &local_time)当前时间: 2024-08-15 12:34:56

5. clock

函数原型:

clock_t clock(void);

参数说明:

  • 无参数。

返回值说明:

  • 返回程序从启动到当前时刻所消耗的CPU时间,以时钟计数的形式表示。

示例代码:

#include <stdio.h>
#include <time.h>

int main() {
    clock_t start, end;
    double cpu_time_used;

    start = clock();
    // 模拟耗时操作
    for (long i = 0; i < 1000000000; i++);
    end = clock();

    cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
    printf("程序运行时间: %f 秒\n", cpu_time_used); // 输出: 程序运行时间: 0.123456 秒
    return 0;
}

表格说明:

函数作用示例输出
clock获取程序运行时间clock()程序运行时间: 0.123456 秒

6. difftime

函数原型:

double difftime(time_t time1, time_t time2);

参数说明:

  • time1: 第二个时间点的时间戳。
  • time2: 第一个时间点的时间戳。

返回值说明:

  • 返回 time1time2 之间的时间差,以秒为单位。结果为 time1 - time2 的值。

示例代码:

#include <stdio.h>
#include <time.h>

int main() {
    time_t start, end;
    double difference;

    // 获取当前时间戳作为开始时间
    start = time(NULL);
    
    // 模拟耗时操作
    for (long i = 0; i < 1000000000; i++);

    // 获取当前时间戳作为结束时间
    end = time(NULL);

    // 计算两个时间戳之间的差值
    difference = difftime(end, start);

    printf("时间差: %.f 秒\n", difference); // 输出: 时间差: 2 秒
    return 0;
}

表格说明:

函数作用示例输出
difftime计算两个时间点之间的时间差(秒)difftime(end, start)时间差: 2 秒

函数详解

difftime 函数用于计算两个时间点之间的差值,并以秒为单位返回。它的参数是两个 time_t 类型的时间戳。time1time2 分别表示结束时间和开始时间。函数返回 time1 - time2 的结果,结果是一个 double 类型的值,表示时间差(秒)。

示例解释

在上面的示例代码中,我们首先获取了当前时间的时间戳 start,然后模拟了一个耗时的操作。之后,再次获取当前时间的时间戳 end。使用 difftime 函数计算 endstart 之间的时间差,得到的结果表示操作所花费的时间(以秒为单位),并打印出来。

这种计算在需要测量程序运行时间、执行时间段的任务等情况下非常有用。通过 difftime 函数,可以方便地获取两个时间点之间的时间差,从而分析和优化程序性能。

7. mktime

函数原型:

time_t mktime(struct tm *tm);

参数说明:

  • tm: 指向 struct tm 结构体的指针,该结构体包含要转换为时间戳的本地时间信息。

返回值说明:

  • 返回将 struct tm 结构体表示的本地时间转换为 time_t 类型的时间戳。如果无法转换,返回 -1

示例代码:

#include <stdio.h>
#include <time.h>

int main() {
    struct tm time_info;
    time_t timestamp;

    // 设置特定的时间
    time_info.tm_year = 2024 - 1900;  // 年份从1900年开始
    time_info.tm_mon = 7;             // 月份从0开始(即8月)
    time_info.tm_mday = 15;           // 日期
    time_info.tm_hour = 12;
    time_info.tm_min = 30;
    time_info.tm_sec = 0;
    time_info.tm_isdst = -1;          // 让系统自动判断夏令时

    timestamp = mktime(&time_info);

    if (timestamp != -1) {
        printf("时间戳: %ld\n", (long)timestamp); // 输出: 时间戳: 1713102600
    } else {
        printf("时间转换失败\n");
    }

    return 0;
}

表格说明:

函数作用示例输出
mktimestruct tm 转换为时间戳mktime(&time_info)时间戳: 1713102600

8. asctime

函数原型:

char *asctime(const struct tm *tm);

参数说明:

  • tm: 指向 struct tm 结构体的指针。

返回值说明:

  • 返回一个指向包含时间的字符串的指针,字符串的格式为 "Day Mon Date HH:MM:SS Year\n"

示例代码:

#include <stdio.h>
#include <time.h>

int main() {
    time_t current_time;
    struct tm *local_time;
    char *time_str;

    current_time = time(NULL);
    local_time = localtime(&current_time);
    time_str = asctime(local_time);

    printf("本地时间: %s", time_str); // 输出: 本地时间: Mon Aug 15 12:34:56 2024\n
    return 0;
}

表格说明:

函数作用示例输出
asctimestruct tm 转换为字符串asctime(&local_time)本地时间: Mon Aug 15 12:34:56 2024\n

9. ctime

函数原型:

char *ctime(const time_t *timep);

参数说明:

  • timep: 指向 time_t 类型的时间戳。

返回值说明:

  • 返回一个指向包含时间的字符串的指针,字符串的格式为 "Day Mon Date HH:MM:SS Year\n"

示例代码:

#include <stdio.h>
#include <time.h>

int main() {
    time_t current_time;
    char *time_str;

    current_time = time(NULL);
    time_str = ctime(&current_time);

    printf("当前时间: %s", time_str); // 输出: 当前时间: Mon Aug 15 12:34:56 2024\n
    return 0;
}

表格说明:

函数作用示例输出
ctime将时间戳转换为字符串ctime(&current_time)当前时间: Mon Aug 15 12:34:56 2024\n

10. clock_gettimeclock_settime

函数原型:

int clock_gettime(clockid_t clk_id, struct timespec *tp);
int clock_settime(clockid_t clk_id, const struct timespec *tp);

参数说明:

  • clk_id: 计时器ID,通常是 CLOCK_REALTIMECLOCK_MONOTONIC
  • tp: 指向 struct timespec 结构体的指针,struct timespec 结构体定义如下:
    struct timespec {
        time_t tv_sec;  // 秒
        long   tv_nsec; // 纳秒
    };
    

返回值说明:

  • 成功时返回 0,失败时返回 -1,并设置 errno 以指示错误类型。

示例代码:

#include <stdio.h>
#include <time.h>

int main() {
    struct timespec ts;

    // 获取当前时间
    if (clock_gettime(CLOCK_REALTIME, &ts) == 0) {
        printf("当前时间: %ld 秒, %ld 纳秒\n", ts.tv_sec, ts.tv_nsec); // 输出: 当前时间: 1634602475 秒, 123456789 纳秒
    } else {
        perror("clock_gettime");
    }

    return 0;
}

表格说明:

函数作用示例输出
clock_gettime获取指定时钟的时间clock_gettime(CLOCK_REALTIME, &ts)当前时间: 1634602475 秒, 123456789 纳秒

总结

在C语言中,时间函数提供了丰富的功能来处理时间和日期。time 函数获取当前时间戳,localtimegmtime 函数将时间戳转换为 struct tm 结构体表示的本地时间和UTC时间。strftime 函数格式化时间字符串,clock 函数获取程序的CPU时间,difftime 函数计算两个时间点之间的差值,mktime 函数将 struct tm 结构体转换为时间戳。asctimectime 函数将时间转换为字符串格式。

了解并正确使用这些时间函数,可以有效地处理时间和日期相关的任务,从而在程序中实现各种时间计算和格式化需求。

9. 结束语

  1. 本节内容已经全部介绍完毕,希望通过这篇文章,大家对C语言时间函数有了更深入的理解和认识。
  2. 感谢各位的阅读和支持,如果觉得这篇文章对你有帮助,请不要吝惜你的点赞和评论,这对我们非常重要。再次感谢大家的关注和支持!点我关注❤️

相关文章:

  • 指针的神秘探险:从入门到精通的奇幻之旅 !

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2047982.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【国奖学姐力荐】matlab智能算法的案例分析和源代码

现在各类数模比赛特别是国赛优化问题越来越多&#xff0c;而求解这些优化问题往往要用到智能启发式算法&#xff0c;今天带大家看一下matlab智能算法的案例分析和源代码&#xff0c;有两本书推荐给大家。 有需要这两本书籍电子版和单独案例的家人可以公屏留言&#xff0c;我会依…

【C# WPF WeChat UI 简单布局】

创建WPF项目 VS创建一个C#的WPF应用程序: 创建完成后项目目录下会有一个MainWindow.xaml文件以及MainWindow.cs文件,此处将MainWindow.xaml文件作为主页面的布局文件,也即为页面的主题布局都在该文件进行。 布局和数据 主体布局 Wechat的布局可暂时分为三列, 第一列为菜…

【Spring Boot】拦截器的使用

目录 前言 拦截器的使用 1.创建一个拦截器 2.注册拦截器 3.配置拦截器的匹配规则 拦截器的实际使用场景 拦截器 vs 过滤器 vs AOP 前言 在Spring Boot中&#xff0c;拦截器&#xff08;interceptor&#xff09;是一种用于拦截和处理请求的机制。通过拦截器&#xff0c;可…

聊天机器人正在膨胀技术

API 在软件中发挥的作用比任何其他东西都要大 当团队与外部 API&#xff08;包括第三方 AI&#xff09;集成时&#xff0c;他们可以将预制的外部功能引入产品中。我使用 API 让用户根据matchboxxr上的提示生成 3D 模型。 但是&#xff0c;尽管越来越多的初创公司只关注人工智能…

Java开发工具IDEA入门指南——如何从VS Code迁移到IDEA?(一)

IntelliJ IDEA是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的Java开发工具&#xff0c;尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能是非常强大的。 在本文中&#x…

【java基础】IDEA 的断点调试(Debug)

目录 1.为什么需要 Debug 2.Debug的步骤 2.1添加断点 2.2单步调试工具介绍 2.2.1 Step Over 2.2.2 Step Into 2.2.3 Force Step Into 2.2.4 Step Out 2.2.5 Run To Cursor 2.2.6 Show Execution Poiint 2.2.7 Resume Program 3.多种 Debug 情况介绍 3.1行断点 3.2方…

XSS GAME

源网站&#xff1a;XSS 游戏 - 学习 XSS 变得简单&#xff01; |创建者 PwnFunction 以下为解码工具&#xff1a; 在线 JSFuck 加密 - 百川在线工具箱 (chaitin.cn) CyberChef 1、Ma Spaghet! 条件 Difficulty is Easy.Pop an alert(1337) on sandbox.pwnfunction.com.No…

分析FP -Growth代码运行内存太大而无法运行的原因

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

随记 - 2024 年 4 月 12 日

写在前面 444 字 | 生活 | 经历 | 感触 正文 或许因为压力大&#xff0c;亦或者简单的糖分不足&#xff0c;今晚好想吃面包和蛋糕。 蛋糕吃不完也买不起&#xff0c;面包还是可以。 实在饿&#xff0c;出门了。 导航两家西点店&#xff0c;关门。怏怏地找另一家。 在十点前&a…

效果炫酷的3D翻转书特效WordPress主题模板MagicBook主题v1.19

正文&#xff1a; MagicBook是一款支持3D翻书特效的书籍WordPress主题。支持可视化页面搭建&#xff0c;3D菜单&#xff0c;完全自适应设计,WPML多语言支持。 这款主题一定会让你爱不释手。虽然他是英文的&#xff0c;但不可不承认的是&#xff0c;它优雅的设计会让你愿意花时…

[Linux]将一个文件复制到多个文件夹下

一、简介 本文介绍了在linux下如何使用cp命令将一个文件复制到多个文件夹、多个文件复制到一个文件夹和多个文件复制到多个文件夹下。 二、代码 假设初始时test/文件夹的结构如下&#xff1a; 1. 将一个文件复制到多个文件夹 a.命令示例 将file1复制到目录des_dir1/&#…

【PGCCC】pg_bestmatch.rs:使用 BM25 提升您的 PostgreSQL 文本查询#PCA

这是一个 PostgreSQL 扩展&#xff0c;它将最佳匹配 25 分数 (BM25) 文本查询的强大功能引入您的数据库&#xff0c;从而增强您执行高效和准确的文本检索的能力。此扩展允许用户从文本生成 BM25 统计稀疏向量&#xff0c;利用 BM25 在各种基准测试任务中经过验证的性能。 为什…

8.16 QT

1.思维导图 2 将day1做的登录界面升级优化【资源文件的添加】 2> 在登录界面的登录取消按钮进行一下设置&#xff1a; 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5…

《SPSS零基础入门教程》学习笔记——03.变量的统计描述

文章目录 3.1 连续变量&#xff08;1&#xff09;集中趋势&#xff08;2&#xff09;离散趋势&#xff08;3&#xff09;分布特征 3.2 分类变量&#xff08;1&#xff09;单个分类变量&#xff08;2&#xff09;多个分类变量 3.1 连续变量 &#xff08;1&#xff09;集中趋势 …

使用 Python 解密加密的 PDF 文件

使用 Python 进行 PDF 文件加密-CSDN博客文章浏览阅读89次&#xff0c;点赞2次&#xff0c;收藏2次。定义一个名为的函数&#xff0c;该函数接受三个参数&#xff1a;输入的 PDF 文件路径input_pdf、输出的加密 PDF 文件路径output_pdf和密码password。https://blog.csdn.net/q…

django中的MESSAGE组件

文章目录 message组件1 使用配置2 设置值3 读取值4 源码分析 message组件 1 使用配置 INSTALLED_APPS [# django.contrib.admin,# django.contrib.auth,# django.contrib.contenttypes,# django.contrib.sessions,django.contrib.messages,django.contrib.staticfiles,"…

AI编程工具合集【请按需收藏】

成长路上不孤单&#x1f60a;【14后小学生一枚&#xff0c;C爱好者&#xff0c;持续分享所学&#xff0c;如有需要欢迎收藏转发&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;】 关于【AI编程工具合集】 在编程领域&#xff0c…

C ICU webassembly库编译

准备环境 在本机搭建Linux环境_本地单机搭建linux系统-CSDN博客 C wasm 使用教程-CSDN博客 法一 git clone https://github.com/mabels/icu.git git checkout -b release-65-1 git diff -p wasm32-start..remotes/origin/wasm32 | patch -p1 cd icu4c/source ./runConfigu…

C#工具库-NPOI

一、简介 NPOI是一个基于c#语言的&#xff0c;开源的&#xff0c;能够在不安装Microsoft Office组件的条件下读写Microsoft Office 的库。前身是Java的POI库,有“先贤”将其翻译成了c#语言的库&#xff0c;而这种由java到c#库的演变并非个例&#xff0c;比如DotNetty之于Netty,…

云动态摘要 2024-08-17

给您带来云厂商的最新动态&#xff0c;最新产品资讯和最新优惠更新。 最新优惠与活动 注册阿里云免费领云服务器_云服务器ECS_阿里云 阿里云 2024-08-14 云上试用新玩法&#xff0c;个人享300元免费额度&#xff0c;企业享660元免费额度&#xff0c;多种规格随心试 [免费体验…