/*
 * 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. JavaScript模板引擎artTemplate.js——两种方法实现性别的判定

    template.helper(name, callback) name:必传,辅助事件的名称. callback:必传,辅助事件的回调函数. return:undefined 所谓的辅助事件,主要用 ...

  2. 无法识别特性“configProtectionProvider”的解决方案

    在使用.Net自身提供的加密本配置文件后再用System.Configuration.ConfigurationManager.AppSettings["key"]获取值时会抛出异 ...

  3. classpath: VS classpath*:

    同名资源存在时,classpath: 只从第一个符合条件的classpath中加载资源,而classpath*: 会从所有的classpath中加载符合条件的资源 classpath*:需要遍历所有的 ...

  4. python re 模块和基础正则表达式

    1.迭代器:对象在其内部实现了iter(),__iter__()方法,可以用next方法实现自我遍历. 二.python正则表达式 1.python通过re模块支持正则表达式 2.查看当前系统有哪些p ...

  5. raw_input和input的区别

    raw_input的返回类型是String类型 input的返回类型是int类型 >>> rawinput = raw_input("raw_input:") r ...

  6. elk系列4之kibana图形化操作

    preface 我们都搭建了ELK系统,且日志也能够正常收集的时候,那么就配置下kibana.我们可以通过kibana配置柱状图,趋势图,统计图,圆饼图等等各类图.下面就拿配置统计图和柱状图为例,结合 ...

  7. Linux终端最常用快捷键

    新建终端窗口: crtl+shift+N 终端的漂移/切换:shift+左右箭头 挂 起:crtl+s 解除挂起:crtl+q 清 屏:crtl+l 命令行光标移动: crtl+a 移动到命令行首 c ...

  8. 获取页面内iframe里面的元素

    结构直接看图比较直接 这里window.frames获取的是iframe的数组 要记得给iframe加个ID才行 后面的记录会详细讲解 在父窗口获取页面内的iframe 里面的元素window.fra ...

  9. QT中将ASCII转换为对应数值的方法

    有时候需要将一段ASCII转换为数值进行传输(比如串口) QString str=codeEdit->toPlainText(); QVector<uint>v=str.toUcs4 ...

  10. HSF和Dubbo有什么区别

    一. 以下摘录自企业级分布式应用服务EDAS官网段落 RPC服务 提供对Dubbo和HSF两个RPC框架的支持.阿里巴巴第一代RPC框架Dubbo是国内第一款成熟的商用级RPC框架,已于2011年正式 ...