C++时间戳转换成日期时间的步骤和示例代码
发布时间 - 2026-01-10 21:48:46 点击率:次因工作需要,经常跟时间戳打交道,但是因为它仅仅是一个数字,我们很难直接看出它有什么意义,或两个时间戳之间究竟差了多长的间隔。于是从MSDN for Visual Studio6上找到了时间戳转换成日期时间的算法。本文除介绍这一算法外,还提供一个示例代码。

1、将时间戳转换成一串32比特的二进制数。有些数字转换之后不够32位,则在前面补充0。这可通过windows自带的计算器完成。比如481522543转换成
0001 1100 1011 0011 0111 0011 0110 1111
2、根据下面格式转换各个字段为10进制数字
YYYY YYYM MMMD DDDD HHHH HMMM MMMS SSSS
0001 1100 1011 0011 0111 0011 0110 1111
Y = year = 0000 1110 = 14
M = month = 0000 0101 = 5
D = day = 0001 0011 = 19
H = hour = 0000 1110 = 14
M = minutes = 0001 1011 = 27
s = seconds = 0000 1111 = 15
注意最右边一位在从日期转换到时间戳的时候砍掉了,因此我们秒这一字段要在最右端加一个补充的0。本例中为 s = seconds = 0 0001 1110 = 30。也因为此,转换后日期时间的“秒”字段总是一个偶数:-)
3、特殊处理:
年这一字段从1980开始计算,因此要加上1980才是正确年份。
这样481522543最终转换成:1994/05/19 14: 27: 30
示例程序如下
/* File name: ts2tm.c
Converts an decimal timestamp to human-readable format
by sillyboard(sillyboard@tom.com)
*/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
struct date_time
{
short dt_year;
short dt_month;
short dt_day;
short dt_hour;
short dt_minute;
short dt_second;
}dt;
short bits_per_field[6] = {7, 4, 5, 5, 6, 5};
int main(int argc, char** argv)
{
long timestamp;
int i, j;
unsigned long mask = 0x80000000;
short bit;
int accum;
short* walker;
if (argc != 2)
{
fprintf(stderr, "Usage: %s decimal-timestamp/n", argv[0]);
exit(1);
}
timestamp = atol(argv[1]);
walker = &dt;
for (i = 0; i < 6; i ++)
{
accum = 0;
for (j = 0; j < bits_per_field[i]; j ++)
{
bit = (timestamp & mask) ? 1 : 0;
if (bit)
{
accum += pow(2, bits_per_field[i] - 1 - j);
}
mask = mask >> 1;
}
*walker ++ = accum;
}
dt.dt_second <<= 1;
printf("%s/t", argv[1]);
printf("%d-%d-%d %d:%d:%d/n", dt.dt_year + 1980, dt.dt_month,
dt.dt_day, dt.dt_hour, dt.dt_minute, dt.dt_second);
return;
}
这篇文章暂时就介绍这么多,具体的大家可以参考以前的文章。
# C++
# 时间戳
# 日期时间
# c++打印封装每次打印前面加上时间戳问题
# C/C++实现重置文件时间戳
# 关于C++使用std::chrono获取当前秒级/毫秒级/微秒级/纳秒级时间戳问题
# C++ std::chrono库使用示例(实现C++ 获取日期
# 计时等功能)
# C++ 中时间与时间戳的转换实例详解
# C++时间戳转化操作实例分析【涉及GMT与CST时区转化】
# c++之time_t和struct tm及时间戳的正确使用方式
# 这一
# 转换成
# 才是
# 很难
# 这么多
# 是从
# 要在
# 仅仅是
# 因为它
# 这篇文章
# 自带
# 提供一个
# 则在
# 这可
# 差了
# 中为
# 有什么意义
# 格式转换
# 本例
# 找到了
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
Python图片处理进阶教程_Pillow滤镜与图像增强
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
如何在云服务器上快速搭建个人网站?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
常州企业网站制作公司,全国继续教育网怎么登录?
香港服务器租用费用高吗?如何避免常见误区?
Python制作简易注册登录系统
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
,怎么在广州志愿者网站注册?
如何快速生成专业多端适配建站电话?
在centOS 7安装mysql 5.7的详细教程
如何快速配置高效服务器建站软件?
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
怎么用AI帮你设计一套个性化的手机App图标?
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
详解Oracle修改字段类型方法总结
高性能网站服务器配置指南:安全稳定与高效建站核心方案
制作公司内部网站有哪些,内网如何建网站?
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
iOS验证手机号的正则表达式
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
长沙做网站要多少钱,长沙国安网络怎么样?
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
Thinkphp 中 distinct 的用法解析
油猴 教程,油猴搜脚本为什么会网页无法显示?
iOS正则表达式验证手机号、邮箱、身份证号等
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
Laravel观察者模式如何使用_Laravel Model Observer配置
如何在万网ECS上快速搭建专属网站?
大连 网站制作,大连天途有线官网?
如何用景安虚拟主机手机版绑定域名建站?
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
Linux系统命令中screen命令详解
大型企业网站制作流程,做网站需要注册公司吗?
如何用AI帮你把自己的生活经历写成一个有趣的故事?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
浅谈Javascript中的Label语句
如何在景安服务器上快速搭建个人网站?
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
如何确保FTP站点访问权限与数据传输安全?
网站制作免费,什么网站能看正片电影?
公司网站制作需要多少钱,找人做公司网站需要多少钱?

