C语言 RTC时间(年月日时分秒) 和 时间戳 互相转换

一、介绍

  在C语言中,将年月日时分秒转换为时间戳(Unix时间戳,即从1970年1月1日00:00:00 UTC到现在的秒数)通常需要使用struct tm结构体和timegm或mktime函数。(注意,mktime函数假设struct tm是本地时间,而timegm函数假设它是UTC时间)。然而,标准的C库并没有直接提供timegm函数,但在许多系统(如GNU C库)中可以找到它作为扩展。
  如果没有timegm函数,也可以使用mktime和timezone(或tzset和localtime与UTC之间的差异)来手动计算UTC时间戳。但请注意,这种方法可能不是跨平台的,并且可能依赖于本地系统的时区设置。

  在C语言中,将时间戳(Unix时间戳)转换为年月日时分秒,可以使用localtime函数,该函数会将一个时间戳转换为一个指向struct tm 结构体的指针该结构体包含了分解后的日期和时间信息

二、RTC时间信息转时间戳

测试代码

#include <stdio.h>  
#include <time.h>  
  
time_t convert_to_timestamp(int year, int month, int day, int hour, int minute, int second)
{  
    struct tm timeinfo = {0};  
    timeinfo.tm_year = year - 1900;  // Year since 1900  
    timeinfo.tm_mon = month - 1;     // Month since January. 0-11  
    timeinfo.tm_mday = day;  
    timeinfo.tm_hour = hour;  
    timeinfo.tm_min = minute;  
    timeinfo.tm_sec = second;  
    timeinfo.tm_isdst = -1;         // Let mktime() determine if DST is in effect  
  
    // Note: mktime assumes local time, not UTC. If your local time is UTC, this is fine.  
    // Otherwise, you need to adjust for timezone differences.  
    return mktime(&timeinfo);  
}  
  
int main() 
{  
    time_t timestamp = convert_to_timestamp(2024, 6, 5, 12, 30, 6);  
    if (timestamp == (time_t)-1) 
    {  
        perror("Error converting to timestamp");  
        return 1;  
    }  
    printf("Timestamp: %ld\n", (long)timestamp);  
    return 0;  
}

测试结果:
在这里插入图片描述
和时间戳在线工具比较
在这里插入图片描述

三、时间戳转RTC时间信息

测试代码

#include <stdio.h>  
#include <time.h>  
  
void timestamp_to_datetime(time_t timestamp, struct tm *datetime) 
{  
    // 使用localtime函数将时间戳转换为本地时间(如果需要UTC时间,请使用gmtime)  
    *datetime = *localtime(&timestamp);  
  
    // 输出日期和时间  
    printf("Year: %d\n", datetime->tm_year + 1900); // tm_year是从1900年开始的  
    printf("Month: %d\n", datetime->tm_mon + 1);     // tm_mon是从0开始的  
    printf("Day: %d\n", datetime->tm_mday);  
    printf("Hour: %d\n", datetime->tm_hour);  
    printf("Minute: %d\n", datetime->tm_min);  
    printf("Second: %d\n", datetime->tm_sec);  
}  
  
int main() 
{  
    // 假设我们有一个时间戳(例如,当前时间的时间戳)  
    //time_t timestamp = time(NULL); // 获取当前时间的时间戳  
    time_t timestamp =1717561806;
  
    // 创建一个struct tm变量来存储转换后的日期和时间  
    struct tm datetime;  
  
    // 调用函数进行转换  
    timestamp_to_datetime(timestamp, &datetime);  
  
    return 0;  
}

测试结果:
在这里插入图片描述

相关推荐

  1. C/C++ 字符串与时间互相转换

    2024-06-12 09:42:05       10 阅读
  2. [C语言]时间

    2024-06-12 09:42:05       44 阅读
  3. c#,获取时间

    2024-06-12 09:42:05       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-12 09:42:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-12 09:42:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-12 09:42:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-12 09:42:05       20 阅读

热门阅读

  1. vue组件介绍之ref

    2024-06-12 09:42:05       8 阅读
  2. 什么是CUDA

    2024-06-12 09:42:05       8 阅读
  3. 【神经网络】资源

    2024-06-12 09:42:05       7 阅读
  4. css连续动画(动画组)

    2024-06-12 09:42:05       5 阅读
  5. Solidity智能合约事件(event)

    2024-06-12 09:42:05       8 阅读
  6. 镜像没有包含 shell 导致无法进入容器

    2024-06-12 09:42:05       9 阅读