学过C语言的都知道有个time函数可以计算时间,

也好像知道time(NULL)返回的是一个距离1970年1月1日0时0分0秒的秒数。

#include <stdio.h>
#include <time.h> int main(void)
{
printf("%d\n", time(NULL));
return ;
}

运行结果:1390351382

乍一看,说法不假,还真是那么一个秒数。

还有不相信的,进一步把秒数、分钟数、小时数分别取出来。

#include <stdio.h>
#include <time.h> int main(void)
{
int t, s, m, h; t = time(NULL); // 秒
s = t % ;
t /= ; // 分钟
m = t % ;
t /= ; // 小时
h = t % ; printf("%d:%d:%d\n", h, m, s);
return ;
}

运行结果:0:53:5

奇怪!我的电脑明明是8点53分,为什么上面是0点呢?

哎!还是来个彻底的吧!根据这个秒数把日历时间算出来,

看看到底有什么猫腻。

#include <stdio.h>
#include <time.h> char month[][] = {
, , , , , , , , , , , ,
, , , , , , , , , , ,
}; // 四年一闰,百年不闰,四百年再闰
int is_leap_year(int year)
{
// 先找四百年,是闰年
if (year % == )
return ; // 再找一百、二百、三百年,是平年
if (year % == )
return ; // 最后找四的倍数年,是闰年
if (year % == )
return ; // 不是四百的倍数,
// 不是一百、二百、三百的倍数,
// 不是四的倍数,是平年
return ;
} int main(void)
{
int t, s, m, h, D, M, Y;
int leap, i; t = time(NULL);
// 秒
s = t % ;
t /= ;
// 分钟
m = t % ;
t /= ;
// 小时
h = t % ;
t /= ; // 年
Y = ;
while ()
{
leap = is_leap_year(Y);
if (leap && t >= )
{
t -= ;
Y++;
}
else if (!leap && t >= )
{
t -= ;
Y++;
}
else
break;
} // 月
leap = is_leap_year(Y);
for (i = , M = ; t >= month[leap][i] ; i++, M++)
t -= month[leap][i]; // 日
D = t + ; printf("%d-%d-%d %d:%d:%d\n", Y, M, D, h, m, s);
return ;
}

运行结果:2014-1-22 0:56:3

哦,日期是一样的,分钟也是一样,秒数应该也差不多,只有小时数差了8小时。

这回可以分析了!

我的电脑位于东八区,比世界统一时间(零区时间)快8个小时,

而time(NULL)函数返回的恰恰是世界统一时间。

要想获得本地时间,还要再调用localtime。

#include <stdio.h>
#include <time.h> int main(void)
{
time_t rawtime;
struct tm *timeinfo; time(&rawtime);
timeinfo = localtime(&rawtime);
printf("本地时间:%s", asctime(timeinfo)); return ;
}

运行结果:本地时间:Wed Jan 22 09:28:34 2014

这次返回的结果和我电脑显示的时间是一致的(位于格林威治的世界标准时间到了1点28分)。

C语言作为基础语言实现了这样的时间计算方法,

即世界统一时间和本地时间分离的方法。

好多后来的语言也都有这种机制,

你直接调用某个函数返回的秒数,其实是0时区代表的秒数,

用这个秒数计算出的时间只能是0时区的时间,

而想要东八区的时间,你要再加上8小时。

当然一般也很少有这样一步一步算出来的,

想获得本地时间(对我们来说就是东八区的时间),

直接调用localtime或类似的函数好了(这些函数内部肯定也要考虑时区的)。

time函数计算时间的更多相关文章

  1. [转帖]C语言计算时间函数 & 理解linux time命令的输出中“real”“user”“sys”的真正含义

    C语言计算时间函数 & 理解linux time命令的输出中“real”“user”“sys”的真正含义 https://blog.csdn.net/willyang519/article/d ...

  2. 用clock()函数计算多项式的运行时间

    百度百科中定义clock():clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t.在MSDN中,查得对clock函数定义如下: clock_t clock(void) ; 简 ...

  3. MySQL:日期函数、时间函数总结

    MySQL 获得当前日期时间 函数 获得当前日期+时间(date + time)函数:now() mysql> select now(); +---------------------+ | n ...

  4. 自学php找工作【二】 PHP计算时间加一天

    最近几天在做一个项目,主要是将SQLserver数据到MySQL数据库,一个url跑一次 同步一次昨天的数据,由于很多数据需要同步,所以做了一个操作界面的,一个单纯跑url的 在其中涉及到了对于时间的 ...

  5. Mysql日期函数,时间函数使用的总结

    一.MySQL 获得当前日期时间 函数 1.1 获得当前日期+时间(date + time)函数:now() mysql> select now();+--------------------- ...

  6. 学习如何看懂SQL Server执行计划(二)——函数计算篇

    二.函数计算部分 --------------------标量聚合--------------------/* 标量聚合-主要在聚合函数操作中产生 计算标量:根据行中的现有值计算出一个新值 流聚合:在 ...

  7. 手把手教您将 libreoffice 移植到函数计算平台

    LibreOffice 是由文档基金会开发的自由及开放源代码的办公室套件.LibreOffice 套件包含文字处理器.电子表格.演示文稿程序.矢量图形编辑器和图表工具.数据库管理程序及创建和编辑数学公 ...

  8. MySQL:日期函数、时间函数总结

    MySQL 获得当前日期时间 函数 查询昨天,时间拼接 select concat(DATE_FORMAT(date_add(now(), interval -1 day),'%Y-%d-%d'),& ...

  9. MySQL:日期函数、时间函数总结(MySQL 5.X)

    http://www.cnblogs.com/she27/archive/2009/01/16/1377089.html 原文:http://www.51sdj.com/phpcms/picture/ ...

随机推荐

  1. 各类 HTTP 返回状态代码详解(转)

    FTP状态码 一.HTTP状态码 如果某项请求发送到您的服务器要求显示您网站上的某个网页(例如,用户通过浏览器访问您的网页或 Googlebot 抓取网页时),服务器将会返回 HTTP 状态代码以响应 ...

  2. ORA-00349: failure obtaining block size for &#39;+fra_grp01_d

    有一次恢复库以后,open时报错ORA-00349,例如以下.最后通过删除这个log group解决.   SQL> alter database open resetlogs; alter d ...

  3. RocketMQ 消息队列单机部署及使用

    转载请注明来源:http://blog.csdn.net/loongshawn/article/details/51086876 相关文章: <RocketMQ 消息队列单机部署及使用> ...

  4. svn删除账户信息

    当我们需要清理eclipse中记录的SVN账号信息时,按如下操作: eclipse中打开window------>preferences------->SVN页面,如下所示: 一般情况下, ...

  5. CGI(Common Gateway Interface),通用网关接口

    通用网关接口,简称CGI,是一种根据请求信息动态产生回应内容的技术.通过CGI,Web 服务器可以将根据请求不同启动不同的外部程序,并将请求内容转发给该程序,在程序执行结束后,将执行结果作为回应返回给 ...

  6. merge实现拉链表

    建表如下( 历史拉链表): 新表(每日更新的): 实现语句: MERGE INTO test_target t1 USING ( SELECT nvl(c.id, b.id) AS id ,CASE ...

  7. C和MATLAB中:同时对多个变量连续赋值

    C语言中绝对不可以连续赋值!!!这是C语言的基本要求. 可以int a,b,c; a=5;b=5;c=5; 或者int a =5;int b=5;int c=5; 但是! 绝对不可以:int a=b= ...

  8. Eigen求矩阵行列式 及 行列式本质

    转置.伴随.行列式.逆矩阵 小矩阵(4 * 4及以下)eigen会自动优化,默认采用LU分解,效率不高 #include <iostream> #include <Eigen/Den ...

  9. iptables 实际操作 之 规则查询 2

    在之前的文章中,我们已经总结过,iptables 为我们预定义了4张表,他们分别是raw 表,mangle表,nat表,filter表,不同的表拥有不同的功能. filter 负责过滤功能,比如允许那 ...

  10. iOS学习笔记(九)—— xml数据解析

    在iPhone开发中,XML的解析有很多选择,iOS SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选,例如TBXML.TouchXML.KissXML.Tiny ...