当前位置: 首页> 游戏> 游戏 > C语言 RTC时间(年月日时分秒) 和 时间戳 互相转换

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

时间:2025/7/9 17:53:49来源:https://blog.csdn.net/weixin_46158019/article/details/139473933 浏览次数:0次

一、介绍

  在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;  
}

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

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: