typedef struct t_xtime {
int year; int month; int day;
int hour; int minute; int second;
} _xtime ; #define xMINUTE (60 ) //1分的秒数
#define xHOUR (60*xMINUTE) //1小时的秒数
#define xDAY (24*xHOUR ) //1天的秒数
#define xYEAR (365*xDAY ) //1年的秒数

可以通过在线转换工具,对程序结果进行验证:http://tool.chinaz.com/Tools/unixtime.aspx

将localtime(UTC+8北京时间)转为UNIX TIME,以1970年1月1日为起点

unsigned int  xDate2Seconds(_xtime *time)
{
static unsigned int month[12]={
/*01月*/xDAY*(0),
/*02月*/xDAY*(31),
/*03月*/xDAY*(31+28),
/*04月*/xDAY*(31+28+31),
/*05月*/xDAY*(31+28+31+30),
/*06月*/xDAY*(31+28+31+30+31),
/*07月*/xDAY*(31+28+31+30+31+30),
/*08月*/xDAY*(31+28+31+30+31+30+31),
/*09月*/xDAY*(31+28+31+30+31+30+31+31),
/*10月*/xDAY*(31+28+31+30+31+30+31+31+30),
/*11月*/xDAY*(31+28+31+30+31+30+31+31+30+31),
/*12月*/xDAY*(31+28+31+30+31+30+31+31+30+31+30)
};
unsigned int seconds = 0;
unsigned int year = 0;
year = time->year-1970; //不考虑2100年千年虫问题
seconds = xYEAR*year + xDAY*((year+1)/4); //前几年过去的秒数
seconds += month[time->month-1]; //加上今年本月过去的秒数
if( (time->month > 2) && (((year+2)%4)==0) )//2008年为闰年
seconds += xDAY; //闰年加1天秒数
seconds += xDAY*(time->day-1); //加上本天过去的秒数
seconds += xHOUR*time->hour; //加上本小时过去的秒数
seconds += xMINUTE*time->minute; //加上本分钟过去的秒数
seconds += time->second; //加上当前秒数
 seconds -= 8 * xHOUR;
return seconds;
}

  

将UNIX时间转为UTC+8 即北京时间

//UNIX转为UTC 已进行时区转换 北京时间UTC+8
void xSeconds2Date(unsigned long seconds,_xtime *time )
{
static unsigned int month[12]={
/*01月*/31,
/*02月*/28,
/*03月*/31,
/*04月*/30,
/*05月*/31,
/*06月*/30,
/*07月*/31,
/*08月*/31,
/*09月*/30,
/*10月*/31,
/*11月*/30,
/*12月*/31
};
unsigned int days;
unsigned short leap_y_count;
time->second = seconds % 60;//获得秒
seconds /= 60;
time->minute = seconds % 60;//获得分
seconds += 8 * 60 ; //时区矫正 转为UTC+8 bylzs
seconds /= 60;
time->hour = seconds % 24;//获得时
days = seconds / 24;//获得总天数
leap_y_count = (days + 365) / 1461;//过去了多少个闰年(4年一闰)
if( ((days + 366) % 1461) == 0)
{//闰年的最后1天
time->year = 1970 + (days / 366);//获得年
time->month = 12; //调整月
time->day = 31;
return;
}
days -= leap_y_count;
time->year = 1970 + (days / 365); //获得年
days %= 365; //今年的第几天
days = 01 + days; //1日开始
if( (time->year % 4) == 0 )
{
if(days > 60)--days; //闰年调整
else
{
if(days == 60)
{
time->month = 2;
time->day = 29;
return;
}
}
}
for(time->month = 0;month[time->month] < days;time->month++)
{
days -= month[time->month];
}
++time->month; //调整月
time->day = days; //获得日
}

  

UNIX Time 时间戳 与 北京时间 相互转换的更多相关文章

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

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

  2. 练手——用Python写的时间戳转换为北京时间的小工具

    #北京时间需加上8小时bj = 8*3600 def time_stamp(times):    #一天总秒数    nonDaySeconds = 24*3600    leapmonths = [ ...

  3. 关于Unix时间戳转北京时间的问题

    工具在这里:http://tool.chinaz.com/Tools/unixtime.aspx?qq-pf-to=pcqq.group 今天踩了坑,无论参数是多少,年份总是1970.才发现原来参数必 ...

  4. C# 时间戳和普通时间相互转换

    // 时间戳转为C#格式时间 private DateTime StampToDateTime(string timeStamp) { DateTime dateTimeStart = TimeZon ...

  5. Delphi中获取Unix时间戳及注意事项(c语言中time()是按格林威治时间计算的,比北京时间多了8小时)

    uses DateUtils;DateTimeToUnix(Now) 可以转换到unix时间,但是注意的是,它得到的时间比c语言中time()得到的时间大了8*60*60这是因为Now是当前时区的时间 ...

  6. unix时间戳(unix timestamp)与北京时间的互转方法

    1.在linux bash下北京时间与unix时间戳互转: 获取unix timestamp: 命令:date "+%s" 输出:1372654714 获取北京时间: 命令:dat ...

  7. 如何将北京时间批量转为Unix时间?用Excel!

    前面我们说过Unix时间戳转换怎样在Excel批量修改,有些人就想如果有特殊需求,那能不能批量将北京时间批量转成unix时间呢?能!用Excel就可以实现!跟ytkah一起试试吧. 将unix时间戳转 ...

  8. PHP时间戳与时间相互转换(精确到毫秒)

    原文:PHP时间戳与时间相互转换(精确到毫秒) /** 获取当前时间戳,精确到毫秒 */ function microtime_float(){   list($usec, $sec) = explo ...

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

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

随机推荐

  1. BZOJ2124: 等差子序列

    题意:给一个 1 到 N 的排列{Ai},询问是否存在 1<=p1<p2<p3<p4<p5<…<pLen<=N(Len>=3),使得 Ap1,Ap ...

  2. Oracle11g的exp导出空表提示EXP-00011: 不存在

    刚lg问我11g无法导出空表,实验了下,果真如此. 原因:11g默认创建一个表时不分配segment,只有在插入数据时才会产生(当然也可以强制分配),以节省磁盘空间. 对于已经存在的空表解决办法: 就 ...

  3. Ztree的简单使用和后台交互的写法(一)

    一.引入ztree的头文件 <!-- 引入ztree/--> <script type="text/javascript" src="${pageCon ...

  4. cmake 静态调用 c++ dll 的类的一个例子(Clion IDE)

    CMakeLists.txt project(aaa) add_library(aaa SHARED aaa.cpp) add_executable(bbb bbb.cpp) target_link_ ...

  5. HTMl5结构元素:article

    article: 表示文档.页面.应用程序或站点中的自包含成分所构成的一个页面的一部分,并且这部分专用于独立地分类或复用.(例如:一个博客的帖子,一篇文章,一个视频文件等.)和<nav>一 ...

  6. valuestack,stackContext,ActionContext.之间的关系以及如何存取数值的

      2013-03-15 10:54 1722人阅读 评论(1) 收藏 举报  分类: J2EE 版权声明:本文为博主原创文章,未经博主允许不得转载. 三者之间的关系如下图所示: ActionCont ...

  7. centos 7.0 ln命令 和chkconfig 命令介绍 开机自动启 服务

    有时候centos需要 程序开机启动的时候  自启动 首先在 /etc/init.d/ cd /etc/init.d 文件夹下建立开机启动项 使用ln命令 使用方式 : ln [options] so ...

  8. SICP— 第一章 构造过程抽象

    SICP  Structure And Interpretation Of Computer Programs 中文第2版 分两部分  S 和 I 第一章 构造过程抽象 1,程序设计的基本元素 2,过 ...

  9. php 数组排序以及按照某个字段排序

    经常,开发人员发现在PHP中使用这种数据结构对值或者数组元素进行排序非常有用.PHP提供了一些适合多种数组的排序函数,这些函数允许你在数组内部对元素进行排列,也允许用很多不同的方法对它们进行重新排序. ...

  10. mysql数据库存储过程异常处理

    14.1.4  定义条件和处理程序 定义条件和处理程序是事先定义程序执行过程中可能遇到的问题.并且可以在处理程序中定义解决这些问题的办法.这种方式可以提前预测可能出现的问题, 并提出解决办法.这样可以 ...