• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++时间戳转换成日期时间的步骤和示例代码

C++时间戳转换成日期时间的步骤和示例代码

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++ 获取系统日期,c++日期类,c++日期函数,c++时间函数,c++时间类等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

因工作需要,经常跟时间戳打交道,但是因为它仅仅是一个数字,我们很难直接看出它有什么意义,或两个时间戳之间究竟差了多长的间隔。于是从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;
}
</div>

这篇文章暂时就介绍这么多,具体的大家可以参考以前的文章。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++实现日期类(Date类)的方法
  • C++时间戳转换成日期时间的步骤和示例代码
  • C++设置系统时间及系统时间网络更新的方法
  • C++实现两个日期间差多少天的解决方法

相关文章

  • 2017-05-28C++常用的#include头文件总结
  • 2017-05-28C语言中网络地址与二进制数之间转换的函数小结
  • 2017-05-28将正小数转化为2-9进制小数的实现方法
  • 2017-05-28C++中声明类的class与声明结构体的struct关键字详解
  • 2017-05-28C中qsort快速排序使用实例
  • 2017-05-28C语言数据结构 链表与归并排序实例详解
  • 2017-05-28VC6实现激活后台窗口最佳方法
  • 2017-05-28递归形式与非递归形式的斐波那契数列的用法分析
  • 2017-05-28C语言中fgetgrent()函数和fgetpwent()函数的用法对比
  • 2017-08-17考试排名

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C语言fgets和fputs函数的用法详解(以字符串的形式读写文件)
    • c++将数组名作为函数参数对数组元素进行相应的运算
    • string中c_str(),data(),copy(p,n)函数的用法总结
    • 探讨:程序在内存中的分配(常量,局部变量,全局变量,程序代码)问题
    • C++ 中的单例模式(普通,2B,文艺)
    • C语言变量类型与输出控制用法实例教程
    • 关于C语言中参数的传值问题
    • 基于一个简单定长内存池的实现方法详解
    • 深入理解C/C++混合编程
    • C语言二维数组指针(指向二维数组的指针)详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有