Linux的时间函数

这篇具有很好参考价值的文章主要介绍了Linux的时间函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

2023年7月19日,周三下午

我今天基于GitHub搭建了自己的博客网站,欢迎大家来我的个人博客网站阅读我的博客

巨龙之路的GitHub个人博客 (julongzhilu.github.io)


目录

  • time
  • 函数原型
  • 使用方法
  • ctime
  • 函数原型
  • 使用方法
  • 疑惑
  • gmtime、 localtime
  • 函数原型
  • 什么是分解时间
  •  使用方法
  • mktime
  • 函数原型
  • 使用方法
  • asctime
  • 函数原型
  • 使用方法
  • strftime
  • 函数原型
  • strftime()的转换说明符集
  • 使用方法
  • strptime
  • 函数原型
  • 使用方法

time

函数原型

获取自 1970 年 1月 1 日早晨零点到现在的秒数,也叫做

#include<time.h>
time_t time(time_t *timep);
使用方法

如果time函数的参数timep为NULL,那么time函数会返回自 1970 年 1月 1 日早晨零点到现在的秒数;

#include<time.h>
#include<stdio.h>
int main(){
    time_t tm;
    tm=time(NULL);
    printf("%d",tm);
}

如果time函数的参数不为NULL,那么time函数会把自 1970 年 1月 1 日早晨零点到现在的秒数赋值给timep指向的time_t类型变量

#include<time.h>
#include<stdio.h>
int main(){
    time_t tm;
    time(&tm);
    printf("%d",tm);
}

建议使用time(NULL),因为这样可以减少出错的可能性,并且使用起来更简单


ctime

函数原型

将time_t转换成可打印格式,所谓可打印格式类似于“Wed Jul 19 01:59:16 2023”

#include<time.h>
char *ctime(const time_t *timep);
使用方法

把一个指向 time_t 的指针作为 timep 参数传入函数 ctime(),将返回一个长达 26 字节的字符串,内含标准格式的日期和时间

#include <stdio.h>
#include <time.h>
​
int main() {
    time_t current_time;
    time(&current_time);
    
    char* time_str = ctime(&current_time);
    printf("Current time: %s", time_str);
    
    return 0;
}
疑惑

为什么ctime函数要用一个指针作为参数,这样不是很麻烦吗?

这是因为ctime函数需要修改一个静态缓冲区中的内容,并返回指向该缓冲区的指针。这个缓冲区包含了一个字符串表示的时间。通过将时间的指针传递给ctime函数,函数可以直接在缓冲区中进行修改,然后返回指向缓冲区的指针,以便用户可以使用这个字符串。

也就是说,通过用指针作为参数,ctime函数就不需要拷贝一份time_t,再根据这副本来修改静态缓冲区的内容,而是可以直接通过指针找到time_t来修改静态缓冲区的内容。这样可以节省内存空间和提高运行效率。

需要注意的是,ctime函数在每次调用时都会使用同一个静态缓冲区,因此如果多次调用ctime函数,后续的调用会覆盖前面调用的结果。如果需要保存多个时间字符串,可以使用localtimegmtime函数进行转换,并使用不同的缓冲区来存储结果。


gmtime、 localtime

函数原型
函数 gmtime() localtime() 可将一 time_t 值转换为一个所谓的分解时间( broken-down
time)。分解时间被置于一个经由静态分配的结构中,其地址则作为函数结果返回。
#include<time.h>

struct tm *gmtime(const time_t *timep);

struct tm *localtime(const time_t *timep);
什么是分解时间

所谓分解时间,其实就是把time_t分解成年、月、日、时、分,秒等

Linux的时间函数,Linux,linux,算法

 使用方法
#include<time.h>

int main(){
    time_t ti;
    struct tm *gm_tm;
    struct tm *local_tm;

    //把从1970年1月1日00:00到现在的秒数赋值给ti
    ti=time(NULL);

    //用gmtime函数把ti分解成年、月、日、时、分、秒等,并把分解的结果
    //存放在一个静态分配的结构tm中,返回tm的地址给gm_tm
    gm_tm=gmtime(&ti);

    //用localtime函数把ti分解成年、月、日、时、分、秒等并把分解的结果
    //存放在一个静态分配的结构tm中,返回tm的地址给local_tm
    local_tm=localtime(&ti);

    printf("gm_tm:%d-%d-%d %d:%d:%d\n",gm_tm->tm_year+1900,gm_tm->tm_mon+1,gm_tm->tm_mday,gm_tm->tm_hour,gm_tm->tm_min,gm_tm->tm_sec);
    printf("local_tm:%d-%d-%d %d:%d:%d\n",local_tm->tm_year+1900,local_tm->tm_mon+1,local_tm->tm_mday,local_tm->tm_hour,local_tm->tm_min,local_tm->tm_sec);
}

Linux的时间函数,Linux,linux,算法


mktime

函数原型

mktime函数将一个分解时间转换成time_t值

#include<time.h>

time_t mktime(struct tm *timeptr);
使用方法
#include<time.h>
#include<stdio.h>

int main(){

    //获取当前时间的time_t值
    time_t current_time;
    current_time=time(NULL);
    printf("1:current_time:%d\n",current_time);

    //把当前时间的time_t值转换成分解时间
    struct tm *current_tm;
    current_tm=gmtime(&current_time);

    //把分解时间再转换成time_t
    current_time=mktime(current_tm);
    printf("2:current_time:%d\n",current_time);
}

Linux的时间函数,Linux,linux,算法


asctime

函数原型

asctime函数把分解时间转换成可打印格式,所谓可打印格式类似于“Wed Jul 19 01:59:16 2023”

#include<time.h>

char *asctime(const struct *timeptr);
使用方法
#include<time.h>
#include<stdio.h>

int main(){
    time_t current_time;
    current_time=time(NULL);

    //获取分解时间
    struct tm *current_tm;
    current_tm=gmtime(&current_time);

    //把分解时间转换成可打印格式
    char* printFormat;
    printFormat=asctime(current_tm);
    printf("%s",printFormat);
}

Linux的时间函数,Linux,linux,算法


strftime

函数原型

strftime函数把分解时间转换成指定格式的字符串

#include<time.h>

size_t strftime(char *outstr,size_t maxsize,const char *format,const struct tm *timeptr);
strftime()的转换说明符集
  • %a:缩写的星期几名称(Sun、Mon、Tue等)
  • %A:完整的星期几名称(Sunday、Monday、Tuesday等)
  • %b:缩写的月份名称(Jan、Feb、Mar等)
  • %B:完整的月份名称(January、February、March等)
  • %c:默认的日期和时间表示(例如:Thu Aug 23 14:55:02 2001)
  • %C:世纪数(取值为年份的前两位数字)
  • %d:月份中的日期(01-31)
  • %D:日期(mm/dd/yy)
  • %e:月份中的日期,带有前导空格(1-31)
  • %F:日期(yyyy-mm-dd)
  • %H:小时(00-23)
  • %I:小时(01-12)
  • %j:一年中的天数(001-366)
  • %m:月份(01-12)
  • %M:分钟(00-59)
  • %n:换行符
  • %p:AM或PM
  • %r:12小时制的时间(hh:mm:ss AM/PM)
  • %R:24小时制的时间(hh:mm)
  • %S:秒(00-61)
  • %t:制表符
  • %T:24小时制的时间(hh:mm:ss)
  • %u:星期几(1-7,其中1表示星期一)
  • %U:一年中的周数(00-53,星期天作为每周的第一天)
  • %V:一年中的周数(01-53,ISO 8601标准,星期一作为每周的第一天)
  • %w:星期几(0-6,其中0表示星期天)
  • %W:一年中的周数(00-53,星期一作为每周的第一天)
  • %x:默认的日期表示(例如:08/23/01)
  • %X:默认的时间表示(例如:14:55:02)
  • %y:年份的最后两位数字(00-99)
  • %Y:年份的完整表示(例如:2001)
  • %z:时区偏移(+hhmm或-hhmm)
  • %Z:时区名称
使用方法
#include <stdio.h>
#include <time.h>

int main() {
    time_t now;
    time(&now);
    struct tm* timeinfo = localtime(&now);

    char buffer[80];
    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", timeinfo);
    printf("Formatted date and time: %s\n", buffer);

    return 0;
}

Linux的时间函数,Linux,linux,算法


strptime

函数原型

strptime函数按照指定格式把一个时间字符串转换成分解时间

#include<time.h>

char *strptime(const char *str,const char *format,struct tm *timeptr);
使用方法
#include <stdio.h>
#include <time.h>

int main() {
    const char* str = "2022-03-24 10:30:00";
    const char* format = "%Y-%m-%d %H:%M:%S";

    struct tm timeinfo;
    if (strptime(str, format, &timeinfo) != NULL) {
        printf("Year: %d\n", timeinfo.tm_year + 1900);
        printf("Month: %d\n", timeinfo.tm_mon + 1);
        printf("Day: %d\n", timeinfo.tm_mday);
        printf("Hour: %d\n", timeinfo.tm_hour);
        printf("Minute: %d\n", timeinfo.tm_min);
        printf("Second: %d\n", timeinfo.tm_sec);
    } else {
        printf("Failed to parse the string.\n");
    }

    return 0;
}

Linux的时间函数,Linux,linux,算法

 文章来源地址https://www.toymoban.com/news/detail-600681.html

到了这里,关于Linux的时间函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • linux文件的三个时间,修改文件时间为任意时间

    目录 一.文件的三个时间 二.修改文件的三种时间为任意时间 当我们在linux中创建了文件或文件夹,文件/文件夹就有了时间属性,而且linux中的文件具有三个时间,可以通过stat命令查看文件的三种时间: 访问时间(Access time):又简称为atime,对文件进行一次读操作,它的访问

    2024年02月05日
    浏览(43)
  • Linux中centos修改系统时间并写到硬件,Linux中centos设置定时自动同步网络时间

    有时候centos会出现时间不准确的情况,这样会导致很多数据的记录时间出错,这时需要我们修改系统时间并写到硬件。 可能我们同步了一段时间之后还会出现时间不准确的情况,这时候将centos设置定时自动同步网络时间,就会很方便。 下面来分别介绍一下这两种方案。 适用

    2024年02月16日
    浏览(50)
  • Linux查找指令 && 时间查看

    我们在windows中想要看一下时间,我们可以直接在显示器上看到,但是如果我们用的是linux远程登录软件我们像查看一下时间,我们应该怎么做? 我们直接输入date,我们就可以看到当前的时间,不过这个是系统按照自己的格式给我们显示的,我们并不像这样看时间怎么做?

    2024年02月04日
    浏览(40)
  • Linux如何查看系统时间

    系统时间是计算机硬件和软件运行的基础,在Linux系统中,查看系统时间是一项基本任务。本文将从多个方面介绍Linux查看系统时间的详细方法。 date是Linux系统中用来显示或设置系统时间和日期的命令,常用于脚本编写、系统管理等操作中。 执行以上命令,系统将输出当前的

    2024年02月09日
    浏览(57)
  • Linux获取纳秒级别时间

    在 Linux 系统中可以使用 gettimeofday 函数来获取时间,这个函数能够以毫秒的精度来获取时间 Linux 系统可以使用 clock_gettime 函数来获取时间精度,其可以以纳秒的精度获取时间

    2024年02月10日
    浏览(34)
  • linux ssh超时时间

    在ssh配置文件/etc/ssh/sshd_config中,将ssh的保活配置打开: ClientAliveInterval 300 ClientAliveCountMax 3 意思是5分钟检查一次客户端响应,最多检查3次。如果3次都检查到客户端不响应,那么就认为ssh已经断开了。 Linux下设置超时时间,是在配置文件/etc/profile里。在该文件下,添加一个变

    2024年02月15日
    浏览(31)
  • Linux时间控制命令

    目录 1、date 2、按照指定的格式输出时间 3、显示是今年中的第几天 4、设置时间 1)date -s \\\"年月日 时分秒\\\"/\\\"年月日\\\"/\\\"月日\\\"/\\\"时分秒\\\"/\\\"时分\\\"/\\\"时\\\" 2)通过date 月日时分年 3)timedatectrl         timedatectl status #查看时间与时区         timedatectl set-time 设置时区 ——用于显示或

    2024年02月07日
    浏览(28)
  • 设置linux的时间

    目录  一、什么是时间 (1)例子1 (2)例子2  二、什么是本地时间 三、linux设置本地时间的方法 (1)方式一:通过互联网自动同步 1.修改时间同步服务器 2.查看时间同步情况 (2)方式二:手动设置本地时间 时间:2023-05-27 15:04:55 时区:中国北京 表示北京时间2023-05-27 15

    2024年02月06日
    浏览(19)
  • LINUX系统如何修改时间

    我们一般使用 date -s 命令来修改Linux系统时间。 比如将系统时间设定成1997年6月10日的命令: 将系统时间设定成下午13点12分0秒的命令: 在系统启动时,Linux操作系统将时间从CMOS中读到系统时间变量中,以后修改时间通过修改系统时间实现。为了保持系统时间与CMOS时间的一致

    2023年04月25日
    浏览(42)
  • linux 时间同步 chrony

    (1)NTP时间服务  逻辑:让时间校对像手表一样波动的快一点,而不是像date命令直接跳跃过去,其他服务器1分钟是60s,对于NTP来讲是30s,来实现时间的校对 问题:为了赶上慢的24小时,可能需要消耗非常长的时间来校对 (2)Chrony时间服务 逻辑:Chrony是NTP的替代品,能更精

    2024年02月12日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包