/*
 * 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. 【腾讯GAD暑期训练营游戏程序班】游戏中的特效系统作业说明文档

  2. AzCopy Upload Files

    We can use many ways upload our Files to Azure, Than I  Introduction to you a good way, AzCopy ! 1. ...

  3. gcc 编译时 include 搜索路径

    这是一个不复杂的问题:但是网上很多回答都不全面:偶找了一个比较全面的(测试过): 引用http://blog.csdn.net/fjb2080/archive/2010/01/23/5247494.a ...

  4. Node实践之一

    大家都知道JavaScript的专长就是处理客户端也就是与浏览器打交道了,所有的与服务器端的交互必须交给后台语言处理程序去做,基于JavaScript不能与服务器进行直接交互这样一个现状,Ryan D ...

  5. elk系列6之tcp模块的使用

    preface tcp模块的使用场景如下: 有一台服务器A只需要收集一个日志,那么我们就可以不需要在这服务器上安装logstash,我们通过在其他logstash上启用tcp模块,监听某个端口,然后我 ...

  6. ElasticSearch-5.0.0安装中文分词插件IK

    Install IK 源码地址:https://github.com/medcl/elasticsearch-analysis-ik,git clone下来. 1.compile mvn packag ...

  7. Linux解压,压缩小总结

    linux下打包与解压的三种命令 最近在读<鸟歌的Linux私房菜基础篇>,想着总结一下所读知识,有益于理解. Linux下常用的命令有三种 gzip,zcat(用于zip,gzip等) ...

  8. JDK Collection 源码分析(2)—— List

    JDK List源码分析 List接口定义了有序集合(序列).在Collection的基础上,增加了可以通过下标索引访问,以及线性查找等功能. 整体类结构 1.AbstractList   该类作为L ...

  9. ubuntu系统修改mysql字符集

    1.进入mysql,查看默认字符集: mysql>show variables like 'char%'; 2.退出mysql; 3.输入命令:sudo gedit /etc/mysql/con ...

  10. Android联系人数据库

    转载自http://www.2cto.com/kf/201406/309356.html 通信录是一个3层的数据存储模型,这三个数据模型就是ContactsContact.Data,ContactsC ...