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 】
【
网络技术251811 】
【
AI营销90571 】
相关推荐:
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
JS经典正则表达式笔试题汇总
WordPress 子目录安装中正确处理脚本路径的完整指南
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
如何用低价快速搭建高质量网站?
长沙做网站要多少钱,长沙国安网络怎么样?
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
青岛网站建设如何选择本地服务器?
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
Laravel如何实现一对一模型关联?(Eloquent示例)
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
焦点电影公司作品,电影焦点结局是什么?
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
Laravel中的Facade(门面)到底是什么原理
如何安全更换建站之星模板并保留数据?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
Python文件操作最佳实践_稳定性说明【指导】
如何用AWS免费套餐快速搭建高效网站?
Python结构化数据采集_字段抽取解析【教程】
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
Laravel PHP版本要求一览_Laravel各版本环境要求对照
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
EditPlus中的正则表达式 实战(1)
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
网站制作软件免费下载安装,有哪些免费下载的软件网站?
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
高端建站如何打造兼具美学与转化的品牌官网?
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
C#如何调用原生C++ COM对象详解
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
佛山企业网站制作公司有哪些,沟通100网上服务官网?
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
Python数据仓库与ETL构建实战_Airflow调度流程详解
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
如何用虚拟主机快速搭建网站?详细步骤解析
如何在Ubuntu系统下快速搭建WordPress个人网站?
Android仿QQ列表左滑删除操作
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)

