学过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. BZOJ 1798 AHOI2009 Seq 维护序列 线段树

    题目大意:维护一个序列,提供三种操作: 1.将区间中每个点的权值乘上一个数 2.将区间中每个点的权值加上一个数 3.求一段区间的和对p取模的值 2631的超^n级弱化版.写2631之前能够拿这个练练手 ...

  2. spring 第一篇(1-1):让java开发变得更简单(上)

    1.释放POJOS能量 传统开发中是如何束缚POJOS呢,如果你开发过java很长时间,那你一定有接触过EJB的开发.那时候开发一个小小的功能都要扩展框架的类或者实现其接口.所以你很容易在早期的Str ...

  3. FD_CLOEXEC用法及原因_转

    转自:使用FD_CLOEXEC实现close-on-exec,关闭子进程无用文件描述符 我们经常会碰到需要fork子进程的情况,而且子进程很可能会继续exec新的程序.这就不得不提到子进程中无用文件描 ...

  4. Large repunit factors (Project Euler 132)

    题目大意: 求出 大数111111.....1 (1e9个1)  前40个质因子的和. 思路:可以把原来的数表示成$\frac{10^k - 1}{9}$ 其中$k=10^9$ 如果一个质数$p$ 满 ...

  5. Mysql配置文件读取顺序

    On Unix, Linux and Mac OS X, MySQL programs read startup options from the following files, in the sp ...

  6. 使用.NET Reflector 查看Unity引擎里面的DLL文件

    转载标注来源哦! 原地址在这里!在这里. 当你查看unity里面API的时候.是不是有时候追踪了一两步就碰到DLL文件走不下去了呢?非常是不爽吧. 这样的问题我也是常常碰到.这是人家商业引擎不想让你看 ...

  7. Android-ViewPagerIndicator框架使用——使用概要

    概要:关于ViewPagerIndicator这个框架,我这里只讲解如何使用,而不去讲解他是如何实现的,所以想了解源码剖析的朋友,这个就可以略过了. ViewPagerIndicator这个框架通过自 ...

  8. git的优秀教程

    1.csdn地址:http://blog.csdn.net/qq_15037231/article/details/73864293 2.廖雪峰的git教程  地址:https://www.liaox ...

  9. yii rule

    https://blog.csdn.net/ljfrocky/article/details/46373691 http://www.yiichina.com/tutorial/997 http:// ...

  10. HttpWatch使用教程

    一 概述: HttpWatch强大的网页数据分析工具.集成在Internet Explorer工具栏.包括网页摘要.Cookies管理.缓存管理.消息头发送/接受.字符查询.POST 数据和目录管理功 ...