当前位置: 首页 > news >正文

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

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

相关文章:

  • Java的一些补充性介绍
  • java:测试hystrix的一些关键参数
  • linux常用的基础命令
  • i.MX8MP平台开发分享(RDC软件配置篇)
  • Ubuntu项目部署
  • java aio nio区别
  • 【教程】从0开始搭建大语言模型:实现Attention机制
  • GEO ISP图像调试-PFC(蓝紫边校正)
  • 2024最新最全【大模型】人工智能零基础入门到精通,看完这一篇就够了!
  • DOS 命令
  • android 开机动画执行流程
  • pdf文件怎么改变大小?在线快速压缩pdf的方法
  • vue2 element组件兼容性问题
  • 苹果WWDC大会速览:AI加持全线产品,iOS融入ChatGPT
  • opencv快速安装以及各种查看版本命令
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • AWS实战 - 利用IAM对S3做访问控制
  • ES6核心特性
  • extjs4学习之配置
  • GitUp, 你不可错过的秀外慧中的git工具
  • Java反射-动态类加载和重新加载
  • JS变量作用域
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • python大佬养成计划----difflib模块
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Vue.js 移动端适配之 vw 解决方案
  • Wamp集成环境 添加PHP的新版本
  • 程序员最讨厌的9句话,你可有补充?
  • 从0实现一个tiny react(三)生命周期
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 软件开发学习的5大技巧,你知道吗?
  • 设计模式 开闭原则
  • 我感觉这是史上最牛的防sql注入方法类
  • 项目管理碎碎念系列之一:干系人管理
  • 一起参Ember.js讨论、问答社区。
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • # Panda3d 碰撞检测系统介绍
  • ######## golang各章节终篇索引 ########
  • (+4)2.2UML建模图
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (AngularJS)Angular 控制器之间通信初探
  • (多级缓存)多级缓存
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (蓝桥杯每日一题)love
  • (十六)一篇文章学会Java的常用API
  • (四)Android布局类型(线性布局LinearLayout)
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (学习总结16)C++模版2
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • .Net 6.0--通用帮助类--FileHelper
  • .NET C# 使用GDAL读取FileGDB要素类