浅谈时间戳与日期时间互转C语言_C 语言

浅谈时间戳与日期时间互转C语言

/*
 * ctime.h
 *
 * Created on: May 19, 2016
 *
*/

#ifndef CTIME_H_
#define CTIME_H_
#include "common/micro_type.h"
#define OFFSET_SECOND   946684800 /* ��1970/1/1/0/0/0��2000/1/1/0/0/0֮��������� */
//#define OFFSET_SECOND  0     /* ��2000/1/1/0/0/0��2000/1/1/0/0/0֮��������� */
#define SECOND_OF_DAY   86400   /* 1�������                   */

typedef struct date_time
{
  uint16  iYear;
  uint16  iMon;
  uint16  iDay;

  uint16  iHour;
  uint16  iMin;
  uint16  iSec;
  uint16  iMsec;
} DATE_TIME;

void GetDateTimeFromSecond(unsigned long lSec, DATE_TIME *tTime);
#endif /* CTIME_H_ */

/*
 * ctime.c
 *
 * Created on: May 19, 2016
 *   Author: root
 */
#include "common/micro_type.h"
#include "ctime.h"
uint8 DayOfMon[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

/* ������1970/1/1/0/0/0�����ʱ */
unsigned long GetSecondTime(DATE_TIME *date_time)
{
  uint16 iYear, iMon, iDay, iHour, iMin, iSec;
  iYear = date_time->iYear;
  iMon = date_time->iMon;
  iDay = date_time->iDay;
  iHour = date_time->iHour;
  iMin = date_time->iMin;
  iSec = date_time->iSec;

  uint16 i, Cyear=0;
  unsigned long CountDay=0;

  for(i=1970; i<iYear; i++)   /* ͳ��1970�굽����֮ǰ�������� */
  {
    if(((i%4==0) && (i%100!=0)) || (i%400==0)) Cyear++;
  }
  CountDay = Cyear * 366 + (iYear-1970-Cyear) * 365;
  for(i=1; i<iMon; i++)
  {
    if((i==2) && (((iYear%4==0)&&(iYear%100!=0)) || (iYear%400==0)))
      CountDay += 29;
    else
      CountDay += DayOfMon[i-1];
  }
  CountDay += (iDay-1);

  CountDay = CountDay*SECOND_OF_DAY + (unsigned long)iHour*3600 + (unsigned long)iMin*60 + iSec;
  return CountDay;
}

/* ����ʱ�������1970/1/1/0/0������ */
void GetDateTimeFromSecond(unsigned long lSec, DATE_TIME *tTime)
{
  uint16 i,j,iDay;
  unsigned long lDay;

  lDay = lSec / SECOND_OF_DAY;    /* תΪ�������ʱ�� */
  lSec = lSec % SECOND_OF_DAY;

  i = 1970;
  while(lDay > 365)
  {
   if(((i%4==0)&&(i%100!=0)) || (i%400==0))  /* ���� */
    lDay -= 366;
   else
    lDay -= 365;
   i++;
  }
  if((lDay == 365) && !(((i%4==0)&&(i%100!=0)) || (i%400==0))) /* ƽ�� */
  {
   lDay -= 365;
   i++;
  }
  tTime->iYear = i;   /* �õ���� */
  for(j=0;j<12;j++)   /* �����·� */
  {
   if((j==1) && (((i%4==0)&&(i%100!=0)) || (i%400==0)))
    iDay = 29;
   else
    iDay = DayOfMon[j];
   if(lDay >= iDay) lDay -= iDay;
   else break;
  }
  tTime->iMon = j+1;
  tTime->iDay = lDay+1;
  tTime->iHour = ((lSec / 3600)+8)%24;//这里注意,世界时间已经加上北京时间差8,
  tTime->iMin = (lSec % 3600) / 60;
  tTime->iSec = (lSec % 3600) % 60;
}

以上这篇浅谈时间戳与日期时间互转C语言就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c语言时间戳
c语言 日期转时间戳、c语言获取时间戳、c语言时间戳、c语言获取当前时间戳、unix时间戳转换 c语言,以便于您获取更多的相关知识。

时间: 2024-10-05 22:59:59

浅谈时间戳与日期时间互转C语言_C 语言的相关文章

浅谈C++中的构造函数分类及调用规则_C 语言

构造函数的分类这里简单地将C++中的构造函数分一下类,直接看下面的代码表达,说明在注释中: #include <iostream> using namespace std; class Text { public: Text() // 无参数构造函数 { m_a = 0; m_b = 0; cout << "无参数构造函数" << endl; } Text(int a) // 有参数构造函数 { m_a = a; m_b = 0; cout <

浅谈stringstream 的.str()正确用法和清空操作_C 语言

streamstring在调用str()时,会返回临时的string对象.而因为是临时的对象,所以它在整个表达式结束后将会被析构. 如果需要进一步操作string对象,先把其值赋给一个string变量后再操作. stringstream ss("012345678901234567890123456789012345678901234567890123456789"); //错误用法 const char* cstr2 = ss.str().c_str(); //正确用法 const

浅谈C++中派生类对象的内存布局_C 语言

主要从三个方面来讲: 1 单一继承 2 多重继承 3 虚拟继承 1 单一继承 (1)派生类完全拥有基类的内存布局,并保证其完整性. 派生类可以看作是完整的基类的Object再加上派生类自己的Object.如果基类中没有虚成员函数,那么派生类与具有相同功能的非派生类将不带来任何性能上的差异.另外,一定要保证基类的完整性.实际内存布局由编译器自己决定,VS里,把虚指针放在最前边,接着是基类的Object,最后是派生类自己的object.举个栗子: class A { int b; char c; }

浅谈C++基类的析构函数为虚函数_C 语言

1.原因: 在实现多态时, 当用基类指针操作派生类, 在析构时候防止只析构基类而不析构派生类. 2.例子: (1). #include<iostream> using namespace std; class Base{ public: Base() {}; ~Base() {cout << "Output from the destructor of class Base!" << endl;}; void DoSomething() { cout

浅谈socket TCP编程中connect的一些坑_C 语言

1.服务端listen成功后,系统就自动接收客户端请求了 man listen: 其中有一段 The  behavior of the backlog argument on TCP sockets changed with Linux        2.2.  Now it specifies the  queue  length  for  completely  established        sockets  waiting  to  be  accepted, instead o

时间就是金钱 浅谈SEO优化与时间

时间就是金钱,往往告诉人们要抓紧时间,不要等待时间的流失.没错,这就是时间.可是对于我们站长来说,时间就是金钱,可能和这个意思有点儿不同,我们的时间要能够沉淀成为历史,让我们的网站有一定的历史背景. 比如建立一个月的站,建立了半年的站,两个站龄往往也会决定网站的成败,Seo需要时间,就是众所周知的,但是很多站长 不懂得真正"需要时间"这四个字的含义,很多站长对网站优化完了之后,就开始了漫长的,毫无目的地等待.在这里面,本人做为新手,希望能够和大家一起探谈一下SEO与时间的问题. 我也一

浅谈JavaScript 中有关时间对象的方法_javascript技巧

ECMAScript中的Date类型是在早期 Java 中的 Java.unile.Date 类基础上构建的.为此 Date 类型使用自 UTC (Coordinated Universal Time, 国际协调时间)1970年1月1日午夜开始经过的毫秒数来保存日期. 在这种数据存储格式下, Date 类型保存的日期能够精确到1970年1月1日之前或之后的285616年 •Date.parse(string) 接受一个表示日期的字符串参数,然后尝试根据这个字符串返回相应日期的毫秒数,不能转换则返

浅谈C#中ToString()和Convert.ToString()的区别_C#教程

浅谈ToString()和Convert.ToString()方法的区别 一.一般用法说明 ToString()是Object的扩展方法,所以都有ToString()方法;而Convert.ToString(param)(其中param参数的数据类型可以是各种基本数据类型,也可以是bool或object类对象. 二.ToString()和Convert.ToString()的区别 一般情况下,这两种方法都可以通用,但是当返回的数据类型中有可能出现null值时如果调用ToString方法了,就会返

浅谈C#各种数组直接的数据复制/转换_C#教程

之前做Opengl程序,用的的C#的SharpGL这个库,里面有各种奇怪绑定的函数,比如原型为: void glInterleavedArrays(uint format, int stride, void * pointer); 的函数被他绑定成: private static extern void glInterleavedArrays(uint format, int stride, int[] pointer); 然后我就被逼着学习了各种float[] 转 int[] 的方法,比较他们