【Linux编程——时间处理:获取当前时间戳、转换本地时间和格式化时间】

本篇博客主要介绍 Linux 编程中常用的时间处理函数,包括获取当前时间、时间戳转换为本地时间、时间格式转换等等。

1. 获取当前时间

在 Linux 编程中,常常需要获取当前时间进行一些操作,例如计算程序的运行时间、记录日志等等。下面介绍两个常用的获取当前时间的函数。

(1) time()

time() 函数是 Linux 中用于获取当前时间戳的函数,定义如下:

#include <time.h>
time_t time(time_t *t);

其中,t 可选,表示存储当前时间的地址。如果传入非空指针,函数会将当前时间的时间戳值存储到该指针指向的内存中,如果不需要存储时间戳值,可以使用 NULL 代替。

time() 函数返回当前的时间戳,即从1970年1月1日至今的秒数,是一个整型数。一般情况下,我们可以使用这个函数来获取当前时间并进行一些时间的计算、转换等操作。

以下是一个示例代码,演示了如何使用time()函数来获取当前时间戳:

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

int main()
{
    time_t now;
    char time_str[20];

    now = time(NULL);
    sprintf(time_str, "%ld", now);
    printf("当前时间戳:%s秒\n", time_str);

    return 0;
}

使用以上代码,可以获得类似以下的输出结果,显示了当前的时间戳:

当前时间戳:1686218947秒

需要注意的是,time() 函数返回的时间戳是和时区无关的,即不受系统时区的影响。如果需要获取本地时间,可以使用 localtime() 函数将时间戳转换为本地时间,并进行以下等操作。

(2) gettimeofday()

gettimeofday() 函数是 Linux 中用于获取当前时间的函数之一,其定义如下:

#include <sys/time.h>
int gettimeofday(struct timeval *tv, struct timezone *tz);

其中,tv 表示时间结构体指针,用于存储获取到的秒数和微秒数;tz 参数已经不被使用了,传入 NULL 即可。

gettimeofday() 函数的作用是获取当前的时间戳(秒级和微秒级),并存储到传入的 tv 结构体中,其精度可以达到微秒级。相比于 time() 函数,gettimeofday() 函数可以提供更加精细的时间信息,并且在一些需要更高精度的场景中使用。例如,计算程序的运行时间、计算程序的频率等等。

以下是一个示例代码,演示了如何使用 gettimeofday() 函数来获取当前时间戳:

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

int main() {
    struct timeval tv;
    gettimeofday(&tv,NULL);
    unsigned long long now = tv.tv_sec * 1000 + tv.tv_usec / 1000;

    printf("当前时间戳:%llu毫秒\n", now);
    return 0;
}

使用以上代码,可以获得类似以下的输出结果,显示了当前的时间戳:

当前时间戳:1686218909798毫秒

2. 时间戳转换为本地时间

time() 函数获取到的时间戳是一个从 1970 年 1 月 1 日 00:00:00 开始计算的秒数,与本地时间和时区无关。因此,在实际应用中,为了更好地理解和展示时间的含义,我们需要将其转换为本地时间。

在 Linux 编程中,可以使用 localtime() 函数将时间戳转换为本地时间,函数定义如下:

#include <time.h>
struct tm *localtime(const time_t *timep);

其中,timep 表示时间戳指针,指向一个 time_t 类型的时间戳。函数返回值是一个 tm 结构体指针,该结构体表示了转换后的本地时间,其成员包含了年、月、日、时、分、秒等信息。

以下是一个示例代码,演示了如何将时间戳转换为本地时间:

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

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

    now = time(NULL);
    local_time = localtime(&now);
    printf("本地时间:%d年%d月%d日 %d时%d分%d秒\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);

    return 0;
}

使用以上代码,可以获得类似以下的输出结果,显示了当前的本地时间:

本地时间:2023年6月8日 18时7分53秒

需要注意的是,localtime() 函数返回的时间是本地时间,与时区相关。如果需要将时间转换为 UTC 时间(类似于 GMT 时间),可以使用 gmtime() 函数。该函数与 localtime() 函数类似,但是返回的是 UTC 时间。

3. 时间格式转换

在实际应用中,经常需要对日期和时间进行格式化处理,并将其展示到用户界面上。在 Linux 编程中,可以使用 strftime() 函数完成时间格式化,函数定义如下:

#include <time.h>
size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);

其中,s 表示存储格式化后字符串的缓冲区,max 表示缓冲区的大小,format 表示输出格式,tm 表示进行格式化的时间。

strftime() 函数的用法类似于 printf() 函数,支持多种转换格式,而且支持本地字符集,可以输出各种国际化的日期和时间格式。下面是一些转换格式的例子:

格式含义示例
%Y年(4 位数字)2021
%m月(2 位数字)07
%d日(2 位数字)01
%H小时(24 小时制)15
%M分钟(2 位数字)51
%S秒(2 位数字)08
%a星期缩写Thu
%A星期全称Thursday
%b月份缩写Jul
%B月份全称July
%c完整的日期和时间表示Thu Jul 1 15:51:08 2021

以下是一个示例代码,演示了如何使用 strftime() 函数将本地时间格式化为规定格式的字符串:

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

int main() {
    time_t now;
    struct tm *local_time;
    char time_str[20];

    now = time(NULL);
    local_time = localtime(&now);
    strftime(time_str, sizeof(time_str),"%Y-%m-%d %H:%M:%S", local_time);
    printf("格式化后的时间:%s\n", time_str);

    return 0;
}

使用以上代码,可以获得类似以下的输出结果,显示了当前的时间的规定格式:

格式化后的时间:2023-06-08 18:09:52

总结

本文主要介绍了 Linux 编程中时间处理的几个常用函数:获取当前时间戳、将时间戳转换为本地时间和时间格式转换。这些函数功能强大,灵活运用可以为我们的程序和系统带来很大的便利。希望本文能够对大家有所帮助。

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千北@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值