当前位置: 首页 > 编程笔记 >

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

翟宾实
2023-03-14
本文向大家介绍C++时间戳转换成日期时间的步骤和示例代码,包括了C++时间戳转换成日期时间的步骤和示例代码的使用技巧和注意事项,需要的朋友参考一下

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

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

 类似资料:
  • 本文向大家介绍PHP正则匹配日期和时间(时间戳转换)的实例代码,包括了PHP正则匹配日期和时间(时间戳转换)的实例代码的使用技巧和注意事项,需要的朋友参考一下 先来一个比较简单实用的代码 日期YYYY-MM-DD php需要一定的时间格式才能转换成时间戳(表示从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数),这就要用到php正则判断,以下是代码: 对该正则的分析: /^\d

  • 我试图找出如何在Kotlin中将转换为,这在Java中非常简单,但我在Kotlin中找不到任何等效的。 例如:历元时间戳(1970-01-01以来的秒数)== 在Kotlin中是否有解决方案,或者我是否必须在Kotln中使用Java语法?请给我一个简单的例子来说明如何解决这个问题。提前谢谢。 这个链接不是我问题的答案

  • 问题内容: 为了获得JavaScript的时间戳,我们使用 到目前为止,将其转换为Python的正确方法是什么?我使用以下代码 我将时间戳除以1000,因为出现类似错误 苏丹。 问题答案: 您当前的方法是正确的,必须除以1000,因为JavaScript返回的时间戳以毫秒为单位,并且期望时间戳以秒为单位。 要保留毫秒精度,可以除以,因此您使用浮点除法而不是整数除法:

  • 我已经尝试从firebase时间戳中获取日期和时间,如下所示: 但我得到的结果是:

  • 但问题是我无法将数据从Firebase转换为Local。save方法将转换为Timestamp fine。 任何解决办法。

  • 本文向大家介绍IOS 时间和时间戳之间转化示例,包括了IOS 时间和时间戳之间转化示例的使用技巧和注意事项,需要的朋友参考一下 以毫秒为整数值的时间戳转换 时间戳转化为时间NSDate 时间转化为时间戳 通过比较时间与当前时间返回年月日的方法 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。