您的位置:首页 > 文旅 > 美景 > C语言 Unix 时间戳 和 时间日期相互转换

C语言 Unix 时间戳 和 时间日期相互转换

2024/10/6 5:58:50 来源:https://blog.csdn.net/weixin_43808708/article/details/140997105  浏览:    关键词:C语言 Unix 时间戳 和 时间日期相互转换

Unix 时间戳(也称为 POSIX 时间戳)是一个表示从 1970 年 1 月 1 日 UTC 时刻开始所经过的秒数的数值。这个时间戳是与时间区域无关的,也就是说它在全球任何地方都表示同一个时刻。

如果你要将 Unix 时间戳转换为某个特定时区的时间,你需要考虑该时区相对于 UTC 的偏移量。对于东八区(即 UTC+8),你确实需要在 Unix 时间戳的基础上加上 8 小时的秒数来得到当地的时间。

一般来说,对于不同的时区,处理方法如下:

UTC+X (东部时区):在 Unix 时间戳基础上加 X 小时。
UTC-X (西部时区):在 Unix 时间戳基础上减 X 小时。
例如:
如果你想得到 UTC+3(如莫斯科)的时间,你需要在 Unix 时间戳基础上加上 3 小时。
如果你想得到 UTC-5(如美国东部标准时间 EST)的时间,你需要在 Unix 时间戳基础上减去 5 小时。

1.时间日期转成时间戳

在 C 语言中,<time.h> 头文件提供了日期和时间处理的功能

注意:
Unix 时间戳是从 1970 年 1 月 1 日 00:00:00 UTC 开始计算的,而不是从 1900 年开始。
在 C 语言中,struct tm 结构体用于存储分解后的日期和时间信息。tm_year 成员表示从 1900 年开始的年数,这是因为 struct tm 结构体的设计是为了与早期的日期和时间处理标准兼容,而不是直接与 Unix 时间戳相关联。

struct tm 结构体成员
struct tm 的成员包括但不限于:

  • tm_sec:秒 (0-60)
  • tm_min:分钟 (0-59)
  • tm_hour:小时 (0-23)
  • tm_mday:一个月中的哪一天 (1-31)
  • tm_mon:月份 (0-11),0 表示一月
  • tm_year:从 1900 年开始的年数
  • tm_wday:一周中的哪一天 (0-6),0 表示周日
  • tm_yday:一年中的哪一天 (0-365)
  • tm_isdst:夏令时标志 (-1 表示未知,0 表示不适用,1 表示适用)

在线运行C语言工具

#include <stdlib.h>
#include <time.h>int main()
{struct tm my_time = {0};time_t timestamp;// 设置时间my_time.tm_year = 2024 - 1900; // 注意:tm_year 是从 1900 年开始计算的my_time.tm_mon = 8 - 1;         // 注意:tm_mon 是从 0 开始的my_time.tm_mday = 6;my_time.tm_hour = 19;my_time.tm_min = 20;my_time.tm_sec = 20;// 调用 mktime 函数timestamp = mktime(&my_time);// 检查 mktime 是否成功if (timestamp == -1) {perror("mktime failed");return 1;}// 打印时间戳printf("Timestamp: %ld\n", (long)timestamp);return 0;
}

输出结果:Timestamp: 1722972020

换算结果是正确的
unix时间戳在线转换工具
在这里插入图片描述

2.时间戳转成时间日期(方法1)

#include <stdio.h>
#include <time.h>int main()
{time_t timestamp;struct tm *timeinfo;char buffer[20];// 假设这是你的时间戳timestamp = 1691365220; // 2023-08-06 23:40:20// 使用 localtime 函数timeinfo = localtime(&timestamp);// 使用 strftime 格式化日期和时间strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", timeinfo);// 打印日期和时间printf("Local Date and Time: %s\n", buffer);return 0;
}

Local Date and Time: 2023-08-06 23:40:20

3.时间戳转成时间日期(方法2)

asctime 函数会将 struct tm 结构体转换为一个包含完整日期和时间的字符串,并以 "\n" 结尾。

#include <stdio.h>
#include <time.h>int main()
{time_t timestamp;struct tm *timeinfo;// 假设这是你的时间戳timestamp = 1722972020; // 2024-08-06 19:20:20// 使用 gmtime 函数timeinfo = gmtime(&timestamp);// 打印日期和时间printf("UTC Date and Time: %s", asctime(timeinfo));return 0;
}

UTC Date and Time: Tue Aug 6 19:20:20 2024

版权声明:

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

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