/*
 * ctime.h
 *
 *  Created on: May 19, 2016
 *      Author: root
 */
 
#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语言的更多相关文章

  1. python(6)时间戳和北京时间互转,输出当前的时间和推到七天前的日期

    项目发展的需要:(包含时间函数)time datetime 时间戳和北京时间互转 import time import datetime s = '2015-04-17 11:25:30' d = d ...

  2. Unix时间戳转日期时间格式,C#、Java、Python各语言实现!

    之前有个Q上好友没事问我,怎么自己写Unix时间戳转日期时间?于是我就顺手写了个C#版本给他!最近想起来,就萌发多写几个语言的版本分享,权当练习思路外加熟悉另外两种语言. 先说转换步骤 先处理年份,从 ...

  3. jquery 时间戳和日期时间转化

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  4. js中时间戳与日期时间之间的相互转换

    1.时间戳转换为标准日期时间格式: function timeFormat(dateStr) { var date = new Date(dateStr); Y = date.getFullYear( ...

  5. mysql 将时间戳与日期时间的转换

    from_unixtime()是MySQL里的时间函数 mysql>SELECT FROM_UNIXTIME( 1249488000, '%Y%m%d' )  ->20071120 mys ...

  6. 使用date命令,进行时间戳和日期时间的互转

    首先是知道时间转成时间戳 date -d "2014-01-16 12:30:11" +%s - :: - :: 其次是知道时间戳,想要知道当时的时间 date -d '1970- ...

  7. Javascript时间戳和日期时间的相互转换

    跟后台对接的时候经常碰到时间格式的问题,有时返回的是时间戳,有时返回的是具体时间,需求又需要它们之间的转换,所以干脆把之前遇到过的情况都给记录下来,以供自己参考! 本文备注:(时间戳单位为毫秒ms,换 ...

  8. JS时间戳格式化日期时间

    由于mysql数据库里面存储时间存的是时间戳,取出来之后,JS要格式化一下显示.(李昌辉) 用的次数比较多,所以写了一个简单方法来转换: //时间戳转时间 function RiQi(sj) { va ...

  9. JS时间戳格式化日期时间 由于mysql数据库里面存储时间存的是时间戳,取出来之后,JS要格式化一下显示。

    //时间戳转时间 function RiQi(sj) { var now = new Date(sj*1000); var year=now.getFullYear(); var month=now. ...

随机推荐

  1. 谈谈我的入门级实体框架Loogn.OrmLite

    每次看到有新的ORM的时候,我总会留意一下,因为自己也写过一个这样的框架,人总是有比较之心的.我可能会down下来跑一跑,也可能不会这么做,这个取决于跑起来的难易程度.我是很懒的,有XML配置或其他稍 ...

  2. HashMap遍历的两种方式

    第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) {    ...

  3. 即使用ADO.NET,也要轻量级实体映射,比Dapper和Ormlite均快

    不管出于什么原因,有时候框架人员摒弃了NH或EF,而使用原生数据库访问对象. 为了优美的编程,用上我写的轻量级映射扩展方法吧 目的:将SqlDataReader自动转换成T类型 代码如下: /// & ...

  4. python基础-修改haproxy配置文件

    需要掌握的知识: 1.函数 2.文件处理 3.tag的用法 4.程序的解耦 需求: 1:查询 2:添加 3:删除 4:修改 5:退出 haproxy.conf 配置文件内容: global log 1 ...

  5. Android LitePal 神一般的数据库框架 超级好用

    参考: Android数据库高手秘籍(一)--SQLite命令 Android数据库高手秘籍(二)--创建表和LitePal的基本用法 Android数据库高手秘籍(三)--使用LitePal升级表 ...

  6. hdu2586 LCA

    How far away ? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  7. myeclipse给项目改了名字,但部署tomcat的项目名还是原来的

    如标题所示: 在myeclipse中按F2改了项目名称,之前在tomcat中部署的名称是另一个,再次重新部署,永远是上一个的旧名称 解决办法: 项目点右键-properties-左上角搜索框输入web ...

  8. DOM0级事件处理和DOM2级事件处理

    转自:http://www.cnblogs.com/holyson/p/3914406.html 0级DOM 分为2个:一是在标签内写onclick事件  二是在JS写onlicke=function ...

  9. group by 查询分组后 组的条数

    比如select gid from table group by gid 查询时使用下面的方法查询条数 select count(distinct gid) from table 使用select c ...

  10. hibernate的集中持久化方法的区别

    一.预备知识 在所有之前,说明一下,对于hibernate,它的对象有三种状态,transient.persistent.detached 下边是常见的翻译办法: transient:瞬态或者自由态 ...